CMAKE 添加編譯選項

在cmake腳本中,設置編譯選項可以通過add_compile_options命令,也可以通過set命令修改CMAKE_CXX_FLAGSCMAKE_C_FLAGS。 
使用這兩種方式在有的情況下效果是一樣的,但請注意它們還是有區別的: 
add_compile_options命令添加的編譯選項是針對所有編譯器的(包括c和c++編譯器),而set命令設置CMAKE_C_FLAGSCMAKE_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++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)
 

舉一反三,我們就可以想到,add_definitions這個命令也是同樣針對所有編譯器,一樣注意這個區別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章