CMake 编译选项设置
链接:https://blog.csdn.net/Huoon/article/details/108520571
在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相关参数。并且分为DEBUG,RELEASE,MINSIZEREL和RELWITHDEBINFO四种类型。
以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_DEBUG和CMAKE_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这个变量。