> 文章列表 > 【cmake篇】选择编译器及设置编译参数

【cmake篇】选择编译器及设置编译参数

【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变量更好