CMake的策略管理用於維護版本的向後兼容,從版本2.0開始引入。
每個新發布版本一般都會引入一些新的策略,每個策略都會有一個標識號,格式
為CMP<NNNN>,<NNNN>對應四個0到9的整數。每個策略都在文檔中描述了OLD和NEW的行為,以及引入的原因。
CMake的策略是一種棄用機制,並不是可靠特性的切換,因此,策略的OLD行為一般不可取,因為在未來的版本中可能被拋棄。
cmake_policy(VERSION <min>[…<max>]) 通過版本來設置策略
<min>:最小版本,至少為2.4,至多為當前安裝的版本號
<max>:最大版本,至少為<min>,可以大於當前安裝版本號,如果當前安裝版本小於3.12,…被認為是版本組成的分隔符,從而會忽略…<max>,因此會按3.12之前的版本基於<min>的策略來執行。
調用cmake_minimum_required會隱式調用cmake_policy,因此,如果沒有特別的策略要指定,可以直接通過調用cmake_minimum_required即可。
也可以直接使用cmake_policy顯示設置策略的行為,為OLD或為NEW。
cmake_policy(SET CMP<NNNN> NEW)
cmake_policy(SET CMP<NNNN> OLD) OLD行為為棄用定義,即在未來的版本中可能被移除。
通過cmake_policy(GET CMP<NNNN> <var>)獲取指定策略的行為,值存放到<var>中。
CMake用棧來保存策略設置。cmake_policy的操作隻影響棧頂。對於每一個子目錄,策略棧自動管理新入口,從而保證孩子目錄的父目錄和兄弟目錄不被破壞。對於include()和find_package()指令的腳本,也有新的入口,除非指定了NO_POLICY_SCOPE選項。
cmake_policy(PUSH)
cmake_policy(POP)