CMP0128¶
在版本 3.22 中新增。
當此政策設定為 NEW
時
<LANG>_EXTENSIONS
會初始化為CMAKE_<LANG>_EXTENSIONS
(如果已設定),否則會回退到CMAKE_<LANG>_EXTENSIONS_DEFAULT
。如果
<LANG>_STANDARD
未設定或符合預設值,則擴充功能會正確地啟用/停用。除非為了達到指定的模式而有必要,否則不會新增影響標準模式的旗標。
OLD
行為
將
<LANG>_EXTENSIONS
初始化為CMAKE_<LANG>_EXTENSIONS
(如果已設定),否則會回退到ON
。如果設定了
<LANG>_STANDARD
且<LANG>_STANDARD_REQUIRED
為OFF
,則總是新增一個旗標。如果
<LANG>_STANDARD
未設定即使
<LANG>_EXTENSIONS
為OFF
,也不會停用擴充功能。如果
<LANG>_EXTENSIONS
為ON
,除了IAR
編譯器之外,無法啟用擴充功能。
在以下情況下,程式碼可能需要針對 NEW
行為進行更新
如果標準模式旗標先前被 CMake 覆寫,且在編譯器偵測期間未使用,現在由於 CMake 不再新增一個,因為偵測到的預設值是適當的,因此生效。
此類程式碼應轉換為以下任一項
使用
<LANG>_STANDARD
和<LANG>_EXTENSIONS
,而不是手動新增旗標。或確保在編譯器偵測期間使用手動指定的旗標。
如果在未設定
<LANG>_STANDARD
的情況下停用了擴充功能,則 CMake 之前實際上不會停用擴充功能。此類程式碼應更新為在需要擴充功能時不要停用。
如果當
<LANG>_STANDARD
符合編譯器的預設值時啟用/停用了擴充功能,則 CMake 之前實際上不會啟用/停用擴充功能。此類程式碼應更新為設定正確的擴充功能模式。
如果在編譯器偵測期間使用影響標準模式的編譯器旗標 (例如在 工具鏈 檔案
中使用 CMAKE_<LANG>_FLAGS_INIT
),則它們將影響偵測到的預設 標準
和 擴充功能
。
此政策在 CMake 版本 3.22 中引入。它可以通過 cmake_policy()
或 cmake_minimum_required()
進行設定。如果未設定,CMake 預設情況下不會發出警告,並使用 OLD
行為。
請參閱 CMAKE_POLICY_WARNING_CMP0128
變數的文件以控制警告。
注意
政策的 OLD
行為依定義已棄用
,並可能在 CMake 的未來版本中移除。