添加編譯選項
在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)
使用ADD_COMPILE_OPTIONS添加-std=c++11選項,是想在編譯c++代碼時加上c++11支持選項。但是因爲ADD_COMPILE_OPTIONS是針對所有類型編譯器的,所以在編譯c代碼時,就會產生warning
雖然並不影響編譯,但看着的確是不爽啊,要消除這個warning,就不能使用ADD_COMPILE_OPTIONS,而是隻針對c++編譯器添加這個option。
所以如下修改代碼,則警告消除。
#判斷編譯器類型,如果是gcc編譯器,則在編譯選項中加入c++11支持
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -std=c++11")
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS這個命令也是同樣針對所有編譯器,一樣注意這個區別。
添加C++11支持
注意以下語法中CMake3.1版本以下與3.1以及3.1以上版本的命令的區別
if (CMAKE_VERSION VERSION_LESS 3.1)
if (NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
else()
set(CMAKE_CXX_STANDARD 11)
endif()
CMake變量的使用
變量的定義和引用
- 使用 ${} 進行變量的引用。在 IF 等語句中,是直接使用變量名而不通過 ${} 取值;
- 環境變量:
- 使用 $ENV{NAME} 指令就可以調用系統的環境變量了;
- 設置環境變量的方式是:SET(ENV{變量名} 值)。