cmake / add_compile_options、CMAKE_CXX_FLAGS 和 add_definitions 区别
在 cmake 腳本中,設(shè)置編譯選項(xiàng)可以通過(guò) add_compile_options 命令,也可以通過(guò) set 命令修改CMAKE_CXX_FLAGS 或 CMAKE_C_FLAGS。
使用這兩種方式在有的情況下效果是一樣的,但請(qǐng)注意它們還是有區(qū)別的:
add_compile_options 命令添加的編譯選項(xiàng)是針對(duì)所有編譯器的(包括 c 和 c++ 編譯器);
set 命令設(shè)置 CMAKE_C_FLAGS 或 CMAKE_CXX_FLAGS 變量則是分別只針對(duì) c 和 c++ 編譯器的。
例如下面的代碼
#判斷編譯器類型,如果是 gcc 編譯器,則在編譯選項(xiàng)中加入 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++11 選項(xiàng),是想在編譯 c++ 代碼時(shí)加上 c++11 支持選項(xiàng)。但是因?yàn)?add_compile_options 是針對(duì)所有類型編譯器的,所以在編譯 c 代碼時(shí),就會(huì)產(chǎn)生如下 warning
??? J:\workspace\facecl.gcc>make b64
??? [ 50%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cdecode.c.obj
??? cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C
??? [100%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cencode.c.obj
??? cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C
??? Linking C static library libb64.a
??? [100%] Built target b64
雖然并不影響編譯,但看著的確是不爽啊,要消除這個(gè) warning,就不能使用add_compile_options,而是只針對(duì) c++ 編譯器添加這個(gè) option。
所以如下修改代碼,則警告消除。
#判斷編譯器類型,如果是 gcc 編譯器,則在編譯選項(xiàng)中加入 c++11 支持 if(CMAKE_COMPILER_IS_GNUCXX)set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")message(STATUS "optional:-std=c++11") endif(CMAKE_COMPILER_IS_GNUCXX)舉一反三,我們就可以想到,add_definitions 這個(gè)命令也是同樣針對(duì)所有編譯器,一樣注意這個(gè)區(qū)別。
轉(zhuǎn)載:cmake:設(shè)置編譯選項(xiàng)的講究(add_compile_options和CMAKE_CXX_FLAGS的區(qū)別)_10km的專欄-CSDN博客_cmake_cxx_flags
(SAW:Game Over!)
總結(jié)
以上是生活随笔為你收集整理的cmake / add_compile_options、CMAKE_CXX_FLAGS 和 add_definitions 区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cmake / target_** 中的
- 下一篇: shell / 获取当前工作目录的方法