在CMakeLists.txt中可以通過修改CMake內(nèi)置的環(huán)境變量來改變C或C++的編譯選項(xiàng).
編譯選項(xiàng)相關(guān)的CMake 變量如下:
CMAKE_C_FLAGS =
CMAKE_C_FLAGS_DEBUG = -g
CMAKE_C_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG
CMAKE_CXX_FLAGS =
CMAKE_CXX_FLAGS_DEBUG = -g
CMAKE_CXX_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG
1234567891011
等號右邊是通過在CMakeLists.txt中打印對應(yīng)變量得到的默認(rèn)值护锤。
對于C語言設(shè)置CMAKE_C_FLAGS相關(guān)參數(shù)葫辐,C++語言設(shè)置CMAKE_CXX_FLAGS相關(guān)參數(shù)幔烛。并且分為DEBUG帮毁,RELEASE哆料,MINSIZEREL和RELWITHDEBINFO四種類型。
以C語言編譯選項(xiàng)為例:
CMAKE_C_FLAGS_DEBUG:編譯Debug版本的時候會采用的編譯選項(xiàng)父虑,默認(rèn)只有一個-g選項(xiàng)眼溶,包含調(diào)試信息;
CMAKE_C_FLAGS_RELEASE:編譯Release版本的時候采用的編譯選項(xiàng)幅疼,默認(rèn)包-O3選項(xiàng)米奸,該選項(xiàng)表示優(yōu)化等級;
CMAKE_C_FLAGS_MINSIZEREL:主要減小目標(biāo)文件大小爽篷,選項(xiàng)-Os就是這個作用悴晰;
CMAKE_C_FLAGS_RELWITHDEBINFO:包含調(diào)試信息的Release版本,-O2和-g狼忱,優(yōu)化的同時也包含了調(diào)試信息膨疏;
CMAKE_C_FLAGS:這個選項(xiàng)沒有默認(rèn)值一睁;
顧名思義钻弄,當(dāng)CMake在編譯項(xiàng)目的時候,選項(xiàng)為Debug則會采用CMAKE_C_FLAGS_DEBUG選項(xiàng)者吁,編譯Release則會采用CMAKE_C_FLAGS_RELEASE選項(xiàng)窘俺,因此,需要設(shè)置編譯選項(xiàng)的時候复凳,在CMakeLists.txt中設(shè)置這些變量就可以了瘤泪。
實(shí)際上可以分別設(shè)置CMAKE_C_FLAGS_DEBUG和CMAKE_C_FLAGS_RELEASE,如下:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -g")
12
上面的設(shè)置兩個都有-std=c++11育八,這個選項(xiàng)是一個公共的選項(xiàng)对途,不管是Release還是Debug都需要設(shè)置。這種情況還可以把公共的設(shè)置放在CMAKE_C_FLAGS變量里面髓棋,如下:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")
123
因?yàn)樵谧罱K編譯的時候的編譯選項(xiàng)不管是Release還是Debug都包含了CMAKE_CXX_FLAGS這個變量实檀。