總結CMake設置編譯選項

添加編譯選項

在cmake腳本中,設置編譯選項可以通過add_compile_options命令,也可以通過set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS。
使用這兩種方式在有的情況下效果是一樣的,但請注意它們還是有區別的:

  1. ADD_COMPILE_OPTIONS命令添加的編譯選項是針對所有編譯器的(包括C和C++編譯器)
  2. 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變量的使用

變量的定義和引用

  1. 使用 ${} 進行變量的引用。在 IF 等語句中,是直接使用變量名而不通過 ${} 取值;
  2. 環境變量:
    • 使用 $ENV{NAME} 指令就可以調用系統的環境變量了;
    • 設置環境變量的方式是:SET(ENV{變量名} 值)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章