CMP0023

普通和關鍵字 target_link_libraries() 簽章不能混用。

CMake 2.8.12 引入了使用 PUBLICPRIVATEINTERFACE 關鍵字的 target_link_libraries() 簽章,以概括 CMake 2.8.7 中引入的 LINK_PUBLICLINK_PRIVATE 關鍵字。 使用任何這些關鍵字的簽章會明確設定目標的鏈接介面,即使為空。 當與普通 target_link_libraries() 簽章的歷史行為結合使用時,會產生令人困惑的行為。 例如,考慮以下程式碼

target_link_libraries(mylib A)
target_link_libraries(mylib PRIVATE B)

在第一行之後,鏈接介面尚未明確設定,因此 CMake 會使用鏈接實作 A 作為鏈接介面。但是,第二行將鏈接介面設定為空。為了避免這種微妙的行為,CMake 現在傾向於不允許對單個目標混合使用 target_link_libraries() 的普通簽章和關鍵字簽章。

此策略的 OLD 行為是允許混合使用關鍵字和普通 target_link_libraries() 簽章。 此策略的 NEW 行為是不允許混合使用關鍵字簽章和普通簽章。

此策略是在 CMake 版本 2.8.12 中引入的。 它可以使用 cmake_policy()cmake_minimum_required() 設定。 如果未設定,CMake 會發出警告,並使用 OLD 行為。

注意

策略的 OLD 行為 依定義已棄用,並可能會在未來版本的 CMake 中移除。