CMP0141¶
於版本 3.25 新增。
MSVC 除錯資訊格式旗標由一個抽象化機制選取。
目標為 MSVC ABI 的編譯器具有選擇除錯資訊格式的旗標。除錯資訊格式的選擇通常會隨著建置組態而變化。
在 CMake 3.24 及更早版本中,除錯資訊格式旗標會由 CMake 自動加入至預設的 CMAKE_<LANG>_FLAGS_<CONFIG>
快取條目中。這讓使用者可以編輯他們的快取條目來調整旗標。然而,對於想要以程式方式選擇不同執行時期函式庫的專案來說,這些預設旗標的存在是有問題的。特別是,它需要對 CMAKE_<LANG>_FLAGS_<CONFIG>
變數進行字串編輯,並且需要知道 CMake 內建的預設值,以便它們可以被替換。
CMake 3.25 及更新版本傾向於將除錯資訊格式旗標從預設的 CMAKE_<LANG>_FLAGS_<CONFIG>
值中移除,而是提供一個第一級的抽象化機制。CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
變數和 MSVC_DEBUG_INFORMATION_FORMAT
目標屬性可以設定來選擇 MSVC 除錯資訊格式。如果它們沒有設定,CMake 會在使用預設值 $<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>
的除錯組態中啟用除錯資訊 (如果編譯器支援的話),否則會使用 $<$<CONFIG:Debug,RelWithDebInfo>:Embedded>
。
此策略為尚未更新以感知抽象化機制的專案提供相容性。此策略設定從第一個啟用目標為 MSVC ABI 編譯器的語言的 project()
或 enable_language()
命令開始生效。
注意
一旦策略在專案的頂層生效,該選擇將在整個樹狀結構中使用。在子目錄中有巢狀專案的專案中,請務必確認所有內容都與選定的策略行為一起運作。
此策略的 OLD
行為是將 MSVC 除錯資訊格式旗標放置在預設的 CMAKE_<LANG>_FLAGS_<CONFIG>
快取條目中,並忽略 CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
抽象化機制。此策略的 NEW
行為是不將 MSVC 除錯資訊格式旗標放置在預設的快取條目中,而是改用抽象化機制。
此策略在 CMake 版本 3.25 中引入。它可以使用 cmake_policy()
或 cmake_minimum_required()
設定。如果沒有設定,CMake 將不會發出警告,並使用 OLD
行為。
注意
策略的 OLD
行為是 依照定義已棄用
,並可能在未來版本的 CMake 中移除。