CMake 手冊詳解(七)


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)一直上傳,自動傳遞到嵌套的最近的策略棧條目。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM