CMake使用介绍(2)
如何设置编译器
实际使用过程中,尤其是嵌入式开发中,经常需要使用到交叉编译,这时就要将系统默认编译器切换到相对应的使用到的编译器,常用的编译器设置主要由一下几种方法:
1:修改系统环境变量,修改默认编译器为需要使用到的编译器
export CC=<C编译器> CXX=<C++编译器>
其中CC是设置gcc编译器,而CXX是设置g++编译器,可以带绝对路径。
该方法缺点:会影响整个系统默认编译器,使用完成之后需要恢复。
2:cmake -D命令设置编译器
通过cmake命令行,在运行时,使用-D 设置CMAKE_FOO_COMPILER 变量值为有效的编译器名称或者全路径。
cmake -D CMAKE_C_COMPILER= <C编译器> CMAKE_CXX_COMPILER==<C++编译器>
3:使用cmake set命令设置
使用set命令在CMakeList.txt设置CMAKE_<LANG>_COMPILE系列变量指定编译器:
例如设置C 及C++编译器:
set(CMAKE_C_COMPILER “编译器绝对路径”)
set(CMAKE_CXX_COMPILER “编译器绝对路径”)
通过设置CMAKE_C_COMPILER和CMAKE_CXX_COMPILER变量强制修改编译器。
如何设置编译器选项
实际构建编译系统是,经常需要对编译器设置各种各样编译器选项,cmake中主要由以下几种方法设置:
1:使用cmake set命令设置
可以使用set命令设置CMAKE_<LANG>_FLAGS系列指定编译器选项:
set(CMAKE_C_FLAGS 编译器选项)
set(CMAKE_CXX_FLAGS 编译器选项)
由于上述变量为cache变量,故全局有效,包括编译链接阶段,可以分别针对C/C++进行设置
2:add_definitions命令
add_definition命令针对的是编译选项中的-D自定义编译选项,例如自定义编译选项FOO 和BAR, 可以使用如下命令
add_definitions(-DFOO -DBAR ...)
该命令的有效范围仅在当前目录或者当前目录以下的目录。
该命令设置之后,会对C和C++编译器都有效。
3:add_compile_option命令
add_compile_option命令可以针对自定义编译选项和标准编译器选项flag:
add_compile_options(<option> ...)
有效范围为 在当前目录或者当前目录以下的目录。该命令只在编译阶段不影响链接阶段。
可以使用标准和非标准编译选项,同样也会添加到所有编译器选项中。
例如:
add_definitions(-std=c++11)
4:target_compile_definitions命令
该命令主要是针对target有效,命令行格式为:
target_compile_definitions(<target>
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
<target> 必须是 add_executable() 或者 add_library() 创建,影响编译阶段不影响链接阶段。
会添加所有编译器选项。
PRIVATE 和 PUBLIC 项将产生 <target> 的 COMPILE_DEFINITIONS 属性。
PUBLIC 和 INTERFACE 项将产生 <target> 的INTERFACE_COMPILE_DEFINITIONS 属性
如何添加头文件目录
添加头文件目录主要由以下几种方法
1:通过编译选项 –I 指定头文件目录
2:通过include_directories指令
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
该命令有效范围为在当前目录或者当前目录以下的目录。该命令只在编译阶段不影响链接阶段。
3:通过target_include_directories指令
target_include_directories(<target> [SYSTEM] [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
如何生成链接文件
生成动态或者静态库主要使用add_library命令
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
其中
如何链接第三方库
添加第三方库主要由以下几种方法:
1:设置编译器选项通过-l<库名>
2:使用target_link_libraries
target_link_libraries(<target> ... <item>... ...)
例如:
target_link_libraries(myProject comm) # 连接libhello.so库,默认优先链接动态库
target_link_libraries(myProject libcomm.a) # 显示指定链接静态库
target_link_libraries(myProject libcomm.so) # 显示指定链接动态库
3:使用link_libraries命令字段
link_libraries([item1 [item2 [...]]]
[[debug|optimized|general] <item>] ...)
如何添加第三方库路径
添加 第三方库是经常需要添加第三方库路径,以能够链接到相应的第三方库
添加第三方库主要由以下几种方法:
1: 设置编译器选项通过-L<库名>
2:使用link_directories命令字段
link_directories([AFTER|BEFORE] directory1 [directory2 ...])
参考资料
https://cmake.org/documentation/
https://gitlab.kitware.com/cmake/community/-/wikis/home
《Mastering CMake》
CMake使用介绍(2)相关推荐
- Cmake的介绍和使用 Cmake实践 - 吾尝终日而思矣 不如须臾之所学也 - C++博客
Cmake的介绍和使用 Cmake实践 - 吾尝终日而思矣 不如须臾之所学也 - C++博客 Cmake的介绍和使用 Cmake实践 - 吾尝终日而思矣 不如须臾之所学也 - C++博客 Cmake的 ...
- CMake使用介绍(1)
CMake历史及背景 CMake最早作为ITK(www.itk.org)组织中的项目,开始于1999年,该组织是由美国国家医学图书馆(US National library of medicine提供 ...
- make和cmake简要介绍
GCC GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器.GNU编译器套件包括C.C++. Objective-C. Fortran.Java.A ...
- make、makefile和cmake简单介绍
make.makefile和cmake的关系 cmake安装 cmake简单示例 make.makefile和cmake的关系 提到make,makefile就不得不提GNU,GNU是"GN ...
- 三、安装cmake,安装resin ,tars服务,mysql 安装介绍,安装jdk,安装maven,c++ 开发环境安装...
三.安装cmake,安装resin 2018年07月01日 21:32:05 youz1976 阅读数:308 开发环境说明: centos7.2 ,最低配置:1核cpu,2G内存,1M带宽 1.安装 ...
- cmake使用总结(转)---工程主目录CMakeList文件编写
在linux 下进行开发很多人选择编写makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量很大,搞的人头很大.采用自动化的项目构建工具cmake 可以将程序员从复杂的m ...
- 熟悉 CMake(二)—— 以一个实例说明 CMakeLists.txt 文件的编写
原文请见 cmake使用总结(转)-工程主目录CMakeList文件编写 在 Linux 下进行开发很多人选择编写 makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量 ...
- CMake Tutorial
CMake Tutorial 介绍 CMake教程提供了一个循序渐进的指南,涵盖了CMake帮助解决的常见的系统构建问题.了解示例项目中各种主题是如何一起工作的会非常有帮助.教程文档和示例源代码可以在 ...
- CMake | include_guard命令详解
目录 一.命令详解 二.简单使用 1.CMakeLists.txt 2.cmake/custom.cmake 3.配置 三.为低于3.10的版本自定义"包含保护"机制 1.cmak ...
最新文章
- Java Exception
- Java笔试面试总结—try、catch、finally语句中有return 的各类情况
- python集合类型的四种操作符_深入解析Python中的集合类型操作符
- chrome浏览器插件开发
- 日记20190416
- linux下wget的用法
- julia go python_过去的Python的四个挑战者:Swift、Go、Julia、R
- python类中self关键字用法
- Android audio切换设备通道流程(二十八)
- 《黑客大曝光:移动应用安全揭秘及防护措施》一3.5 小结
- SOAP、WSDL、 UDDI之间的关系
- 斐讯K3官改,安装onmp教程,回馈社区。
- 拓扑排序算法(1.0版)
- WPF 鼠标滚轮对图片的缩放
- HBase BulkLoad批量写入数据实战
- 王者荣耀4.4日服务器维护,王者荣耀:4.4全天停服更新,只为响应全国性“悼念活动”!...
- 线程开的越多就越好吗|趣谈线程池
- 同向放大器、反向放大器的区别
- ie浏览器地址栏中文参数提交服务器乱码分析
- 竖流式沉淀池集水槽设计计算_各类沉淀池的设计要点都在这了!(建议收藏)...