【CMake】CMake 编译选项设置

CMakeLists.txt中可以通过修改CMake内置的环境变量来改变C或C++的编译选项.

编译选项相关的CMake 变量如下:

CMAKE_C_FLAGS = 
CMAKE_C_FLAGS_DEBUG = -g
CMAKE_C_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG

CMAKE_CXX_FLAGS = 
CMAKE_CXX_FLAGS_DEBUG = -g
CMAKE_CXX_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG

等号右边是通过在CMakeLists.txt中打印对应变量得到的默认值。

对于C语言设置CMAKE_C_FLAGS相关参数,C++语言设置CMAKE_CXX_FLAGS相关参数。并且分为DEBUGRELEASEMINSIZERELRELWITHDEBINFO四种类型。

以C++语言编译选项为例:

  • CMAKE_CXX_FLAGS_DEBUG:编译Debug版本的时候会采用的编译选项,默认只有一个-g选项,包含调试信息;

  • CMAKE_CXX_FLAGS_RELEASE:编译Release版本的时候采用的编译选项,默认包-O3选项,该选项表示优化等级;

  • CMAKE_CXX_FLAGS_MINSIZEREL:主要减小目标文件大小,选项-Os就是这个作用;

  • CMAKE_CXX_FLAGS_RELWITHDEBINFO:包含调试信息的Release版本,-O2和-g,优化的同时也包含了调试信息;

  • CMAKE_CXX_FLAGS:这个选项没有默认值;

顾名思义,当CMake在编译项目的时候,选项为Debug则会采用CMAKE_CXX_FLAGS_DEBUG选项,编译Release则会采用CMAKE_CXX_FLAGS_RELEASE选项,因此,需要设置编译选项的时候,在CMakeLists.txt中设置这些变量就可以了。

实际上可以分别设置CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE,如下:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -g")

上面的设置两个都有-std=c++11,这个选项是一个公共的选项,不管是Release还是Debug都需要设置。这种情况还可以把公共的设置放在CMAKE_CXX_FLAGS变量里面,如下:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}  -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")

因为在最终编译的时候的编译选项不管是Release还是Debug都包含了CMAKE_CXX_FLAGS这个变量。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐