【cmake篇】选择编译器及设置编译参数
实际开发的过程中,可能有多个版本的编译器,不同功能可能需要设置不同的编译参数。
参考文章链接:选择编译器及设置编译器选项
目录
一、选择编译器
1、查看系统中已有的编译器
2、选择编译器的两种方式
二、设置编译参数
1、add_compile_options
2、通过设置CMAKE_CXX_FLAGS来配置
3、add_compile_options 与 CMAKE_CXX_FLAGS 配置的区别
一、选择编译器
1、查看系统中已有的编译器
既然是手动设置编译器,那么我们需要知道当前系统中有哪些编译器是允许我们使用的,gcc 和 g++ 编译器都放在了 /usr/bin 目录下。
查看gcc:
ls /usr/bin/gcc*
其中 gcc-5 表示的是 gcc 的 5.5 版本,gcc 则表示当前的默认版本
查看g++:
ls /usr/bin/g++*
g++ 也是同理,g++ 表示的是 当前默认版本
2、选择编译器的两种方式
cmake 内置了编译器相关的变量来方便我们手动设置编译器,值得注意的是,C 编译器和 C++编译器的设置,使用的是不同的变量:
- C 编译器:对应内置变量为 CMAKE_C_COMPILER
- C++ 编译器:对应内置变量为 CMAKE_CXX_COMPILERps
方式一:命令行设置
使用 cmake 编译时,用的是cmake命令,我们可以在cmake命令的后面携带附加选项l,来指定要使用哪个版本的编译器。
# 设置 C 编译器(如果不指定版本的话,使用的是 gcc 的默认版本)
cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc
# 设置 C++ 编译器 (指定的编译器为 g++9 )
cmake .. -DCMAKE_C_COMPILER=/usr/bin/g++-9
ps:设置的编译器必须是要能在 /usr/bin 下找到的
方式二:CMakeLists.txt 设置
# 设置 C 编译器(如果不指定版本的话,使用的是 gcc 的默认版本)
set (CMAKE_C_COMPILER /usr/bin/gcc)
# 设置 C++ 编译器 (指定的编译器为 g++9 )
set (CMAKE_CXX_COMPILER /usr/bin/g++-9)
ps:这两条命令应该放在文件的开始位置(cmake_minimum_required命令之下,其他命令之上),否则可能无效
二、设置编译参数
配置编译参数有两种方式,一种是使用 add_compile_options 命令配置;另一种是通过设置变量 CMAKE_C_FLAGS 或者 CMAKE_CXX_FLAGS 来配置。
1、add_compile_options
可以添加多个参数,不同参数之间通过空格隔开,命令格式如下:
add_compile_options(<option> ...)
示例:
if (MSVC)
add_compile_options(/W4 /WX)
else(MSVC)
add_compile_options(-Wall -Wextra -pedantic -Werror)
endif(MSVC)
2、通过设置CMAKE_CXX_FLAGS来配置
CMAKE_C_FLAGS 是 C 编译器的编译选项,CMAKE_CXX_FLAGS 是 C++编译器的编译选项,两者都仅对当前编译器有效。
# 设置 C 编译器的编译选项
set(CMAKE_C_FLAGS -Wall -O3)
# 设置 C++ 编译器的编译选项
set(CMAKE_CXX_FLAGS
-std=c++11
-Wall
-O3
)
3、add_compile_options 与 CMAKE_CXX_FLAGS 配置的区别
add_compile_options | CMAKE_CXX_FLAGS | |
编译器角度 | 对所有编译器都有效 | 仅针对 C++ 编译器 |
作用范围的角度 | 作用域是全局,对子工程中的编译也有效 | 仅针对当前文件(当前子工程)的编译 |
对于一些在整个项目中通用的编译选项可以使用add_compile_options命令来添加比较方便,对于各个模块中的独立选项则使用CMAKE_CXX_FLAGS变量更好