总结CMake设置编译选项
添加编译选项
在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或
CMAKE_C_FLAGS。
使⽤这两种⽅式在有的情况下效果是⼀样的,但请注意它们还是有区别的:
1. ADD_COMPILE_OPTIONS命令添加的编译选项是针对所有编译器的(包括C和C++编译器)
2. set命令设置CMAKE_C_FLAGS或CMAKE_CXX_FLAGS变量则是分别只针对C和C++编译器的。
例如下⾯的代码:
#判断编译器类型,如果是gcc编译器,则在编译选项中加⼊c++11⽀持
IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_COMPILE_OPTIONS(-std=c++11)
MESSAGE(STATUS "optional:-std=c++11")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
使⽤ADD_COMPILE_OPTIONS添加-std=c++项,是想在编译c++代码时加上c++11⽀持选项。但是因为
ADD_COMPILE_OPTIONS是针对所有类型编译器的,所以在编译c代码时,就会产⽣warning
虽然并不影响编译,但看着的确是不爽啊,要消除这个warning,就不能使⽤ADD_COMPILE_OPTIONS,⽽是只针对c++编译器添加这个option。
所以如下修改代码,则警告消除。
#判断编译器类型,如果是gcc编译器,则在编译选项中加⼊c++11⽀持
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -std=c++11")
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS这个命令也是同样针对所有编译器,⼀样注意这个区别。
添加C++11⽀持
注意以下语法中CMake3.1版本以下与3.1以及3.1以上版本的命令的区别
if (CMAKE_VERSION VERSION_LESS 3.1)
if (NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
else()
gnu编译器set(CMAKE_CXX_STANDARD 11)
endif()
CMake变量的使⽤
变量的定义和引⽤
1. 使⽤ ${} 进⾏变量的引⽤。在 IF 等语句中,是直接使⽤变量名⽽不通过 ${} 取值;
2. 环境变量:
1. 使⽤ $ENV{NAME} 指令就可以调⽤系统的环境变量了;
2. 设置环境变量的⽅式是:SET(ENV{变量名} 值)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论