如何设置编译器

实际使用过程中,尤其是嵌入式开发中,经常需要使用到交叉编译,这时就要将系统默认编译器切换到相对应的使用到的编译器,常用的编译器设置主要由一下几种方法:

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() 创建,影响编译阶段不影响链接阶段。

会添加所有编译器选项。

INTERFACE|PUBLIC|PRIVATE 为不同作用域

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 ...])

其中

ØSTATIC:生成静态库
ØSHARED:   生成动态库
ØMODULE: 一种不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数

如何链接第三方库

添加第三方库主要由以下几种方法:

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)相关推荐

  1. Cmake的介绍和使用 Cmake实践 - 吾尝终日而思矣 不如须臾之所学也 - C++博客

    Cmake的介绍和使用 Cmake实践 - 吾尝终日而思矣 不如须臾之所学也 - C++博客 Cmake的介绍和使用 Cmake实践 - 吾尝终日而思矣 不如须臾之所学也 - C++博客 Cmake的 ...

  2. CMake使用介绍(1)

    CMake历史及背景 CMake最早作为ITK(www.itk.org)组织中的项目,开始于1999年,该组织是由美国国家医学图书馆(US National library of medicine提供 ...

  3. make和cmake简要介绍

    GCC GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器.GNU编译器套件包括C.C++. Objective-C. Fortran.Java.A ...

  4. make、makefile和cmake简单介绍

    make.makefile和cmake的关系 cmake安装 cmake简单示例 make.makefile和cmake的关系 提到make,makefile就不得不提GNU,GNU是"GN ...

  5. 三、安装cmake,安装resin ,tars服务,mysql 安装介绍,安装jdk,安装maven,c++ 开发环境安装...

    三.安装cmake,安装resin 2018年07月01日 21:32:05 youz1976 阅读数:308 开发环境说明: centos7.2 ,最低配置:1核cpu,2G内存,1M带宽 1.安装 ...

  6. cmake使用总结(转)---工程主目录CMakeList文件编写

    在linux 下进行开发很多人选择编写makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量很大,搞的人头很大.采用自动化的项目构建工具cmake 可以将程序员从复杂的m ...

  7. 熟悉 CMake(二)—— 以一个实例说明 CMakeLists.txt 文件的编写

    原文请见 cmake使用总结(转)-工程主目录CMakeList文件编写 在 Linux 下进行开发很多人选择编写 makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量 ...

  8. CMake Tutorial

    CMake Tutorial 介绍 CMake教程提供了一个循序渐进的指南,涵盖了CMake帮助解决的常见的系统构建问题.了解示例项目中各种主题是如何一起工作的会非常有帮助.教程文档和示例源代码可以在 ...

  9. CMake | include_guard命令详解

    目录 一.命令详解 二.简单使用 1.CMakeLists.txt 2.cmake/custom.cmake 3.配置 三.为低于3.10的版本自定义"包含保护"机制 1.cmak ...

最新文章

  1. Java Exception
  2. Java笔试面试总结—try、catch、finally语句中有return 的各类情况
  3. python集合类型的四种操作符_深入解析Python中的集合类型操作符
  4. chrome浏览器插件开发
  5. 日记20190416
  6. linux下wget的用法
  7. julia go python_过去的Python的四个挑战者:Swift、Go、Julia、R
  8. python类中self关键字用法
  9. Android audio切换设备通道流程(二十八)
  10. 《黑客大曝光:移动应用安全揭秘及防护措施》一3.5 小结
  11. SOAP、WSDL、 UDDI之间的关系
  12. 斐讯K3官改,安装onmp教程,回馈社区。
  13. 拓扑排序算法(1.0版)
  14. WPF 鼠标滚轮对图片的缩放
  15. HBase BulkLoad批量写入数据实战
  16. 王者荣耀4.4日服务器维护,王者荣耀:4.4全天停服更新,只为响应全国性“悼念活动”!...
  17. 线程开的越多就越好吗|趣谈线程池
  18. 同向放大器、反向放大器的区别
  19. ie浏览器地址栏中文参数提交服务器乱码分析
  20. 竖流式沉淀池集水槽设计计算_各类沉淀池的设计要点都在这了!(建议收藏)...

热门文章

  1. 支付窗开发实战-张代浩-专题视频课程
  2. Linux 查看ERROR日志方法
  3. 站在面试官角度,看求职与内卷
  4. 记录TCP协议使用Socket连接,客户端请求服务器read()阻塞问题
  5. Java8 新特性 Optional
  6. usermod命令,用户密码管理,mkpasswd命令
  7. 1-1. 虚拟机控制
  8. PHP采集程序中的常用函数
  9. java中return的作用
  10. 测试 MathJax 排版功效