cmake:設置編譯選項的講究(add_compile_options和CMAKE_CXX_FLAGS的區別) 轉自CSDN


https://blog.csdn.net/10km/article/details/51731959

cmake:設置編譯選項的講究(add_compile_options和CMAKE_CXX_FLAGS的區別)
2016年06月22日 09:53:48
閱讀數:25928
在cmake腳本中,設置編譯選項可以通過add_compile_options命令,也可以通過set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS。
使用這兩種方式在有的情況下效果是一樣的,但請注意它們還是有區別的:
add_compile_options命令添加的編譯選項是針對所有編譯器的(包括c和c++編譯器),而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)
1
2
3
4
5
使用add_compile_options添加-std=c++11選項,是想在編譯c++代碼時加上c++11支持選項。但是因為add_compile_options是針對所有類型編譯器的,所以在編譯c代碼時,就會產生如下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

雖然並不影響編譯,但看着的確是不爽啊,要消除這個warning,就不能使用add_compile_options,而是只針對c++編譯器添加這個option。
所以如下修改代碼,則警告消除。

判斷編譯器類型,如果是gcc編譯器,則在編譯選項中加入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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM