CMD#11:build_command 獲取構建該工程的命令行。
build_command(<variable>
[CONFIGURATION <config>]
[PROJECT_NAME <projname>]
[TARGET <target>])
把給定的變量<variable>設置成一個字符串,其中包含使用由變量CMAKE_GENERATOR確定的項目構建工具,去構建某一個工程的某一個目標配置的命令行。
對於多配置生成器,如果忽略CONFIGURATION選項,CMake將會選擇一個合理的默認值;而對於單配置生成器,該選項會被忽略。
如果PROJECT_NAME選項被忽略,得到的命令行用來構建當前構建樹上的頂層工程。
如果TARGET選項被忽略,得到的命令行可以用來構建所有目標,比較高效的用法是構建目標all或者ALL_BUILD。
build_command(<cachevariable> <makecommand>)
不推薦使用以上的這種格式,但對於后相兼容還是有用的。只要可以,就要使用第一種格式。
這種格式將變量<cachevariable>設置為一個字符串,其中包含從構建樹的根目錄,用<makecommand>指定的構建工具構建這個工程的命令。<makecommand>應該是指向msdev,devenv,nmake,make或者是一種最終用戶指定的構建工具的完整路徑。
CMD#12:cmake_minimum_required 設置一個工程所需要的最低CMake版本。
cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]]
[FATAL_ERROR])
如果CMake的當前版本低於指定的版本,它會停止處理工程文件,並報告錯誤。當指定的版本高於2.4時,它會隱含調用:
cmake_policy(VERSION major[.minor[.patch[.tweak]]])
從而將cmale的策略版本級別設置為指定的版本。當指定的版本是2.4或更低時,這條命令隱含調用:
cmake_policy(VERSION 2.4)
這將會啟用對於CMake 2.4及更低版本的兼容性。
FATAL_ERROR選項是可以接受的,但是CMake 2.6及更高的版本會忽略它。如果它被指定,那么CMake 2.4及更低版本將會以錯誤告終而非僅僅給出個警告。
CMD#13:cmake_policy 管理CMake的策略設置。
隨着CMake的演變,有時為了搞定bug或改善現有特色的實現方法,改變現有的行為是必須的。CMake的策略機制是在新的CMake版本帶來行為上的改變時,用來幫助保持現有項目的構建的一種設計。每個新的策略(行為改變)被賦予一個"CMP<NNNN>"格式的識別符,其中"<NNNN>"是一個整數索引。每個策略相關的文檔都會描述“舊行為”和“新行為”,以及引入該策略的原因。工程可以設置各種策略來選擇期望的行為。當CMake需要了解要用哪種行為的時候,它會檢查由工程指定的一種設置。如果沒有可用的設置,工程假定使用“舊行為”,並且會給出警告要求你設置工程的策略。
cmake_policy是用來設置“新行為”或“舊行為”的命令。如果支持單獨設置策略,我們鼓勵各項目根據CMake的版本來設置策略。
cmake_policy(VERSION major.minor[.patch[.tweak]])
上述命令指定當前的CMakeLists.txt是為給定版本的CMake書寫的。所有在指定的版本或更早的版本中引入的策略會被設置為使用“新行為”。所有在指定的版本之后引入的策略將會變為無效(unset)。該命令有效地為一個指定的CMake版本請求優先采用的行為,並且告知更新的CMake版本給出關於它們新策略的警告。命令中指定的策略版本必須至少是2.4,否則命令會報告一個錯誤。為了得到支持早於2.4版本的兼容性特性,查閱策略CMP0001的相關文檔。
cmake_policy(SET CMP<NNNN> NEW)
cmake_policy(SET CMP<NNNN> OLD)
對於某種給定的策略,該命令要求CMake使用新的或者舊的行為。對於一個指定的策略,那些依賴於舊行為的工程,通過設置策略的狀態為OLD,可以禁止策略的警告。或者,用戶可以讓工程采用新行為,並且設置策略的狀態為NEW。
cmake_policy(GET CMP<NNNN> <variable>)
該命令檢查一個給定的策略是否設置為舊行為或新行為。如果策略被設置,輸出的變量值會是“OLD”或“NEW”,否則為空。
CMake將策略設置保存在一個棧結構中,因此,cmake_policy命令產生的改變僅僅影響在棧頂端的元素。在策略棧中的一個新條目由各子路徑自動管理,以此保護它的父路徑及同層路徑的策略設置。CMake也管理通過include()和find_package()命令加載的腳本中新加入的條目,除非調用時指定了NO_POLICY_SCOPE選項(另外可參考CMP0011)。cmake_policy命令提供了一種管理策略棧中自定義條目的接口:
cmake_policy(PUSH)
cmake_policy(POP)
每個PUSH必須有一個配對的POP來去掉撤銷改變。這對於臨時改變策略設置比較有用。
函數和宏會在它們被創建的時候記錄策略設置,並且在它們被調用的時候使用記錄前的策略。如果函數或者宏實現設置了策略,這個變化會通過調用者(caller)一直上傳,自動傳遞到嵌套的最近的策略棧條目。
