CMP0079

在版本 3.13 中新增。

target_link_libraries() 允許與其他目錄中的目標一起使用。

在 CMake 3.13 之前的版本中,target_link_libraries() 命令不接受在其第一個參數中使用非在呼叫目錄中建立的目標,以更新目標本身的 LINK_LIBRARIES。它確實意外地接受了來自其他目錄的目標,用於僅更新 INTERFACE_LINK_LIBRARIES 的呼叫,但只是將條目添加到屬性中,就好像呼叫是在原始目錄中進行的一樣。因此,以這種方式指定的連結介面函式庫始終在原始目標的範圍內,而不是在呼叫 target_link_libraries() 的範圍內被產生器查找。

CMake 3.13 現在允許從任何目錄呼叫 target_link_libraries() 命令,以將連結依賴項和連結介面函式庫添加到在其他目錄中建立的目標。這些條目會被添加到 LINK_LIBRARIESINTERFACE_LINK_LIBRARIES 中,並使用特殊的(內部)後綴來告知產生器在呼叫範圍而不是建立目標的範圍中查找名稱。

此策略提供了與已在另一個目錄中的目標上使用帶有 INTERFACE 關鍵字的 target_link_libraries() 以添加要在目標目錄中查找的 INTERFACE_LINK_LIBRARIES 條目的專案的相容性。此類專案應更新以了解在這種情況下的新範圍規則。

此策略的 OLD 行為是不允許呼叫 target_link_libraries() 命名來自另一個目錄的目標,除非在先前意外允許的僅使用 INTERFACE 關鍵字的情況下。NEW 行為是允許所有此類呼叫,但使用新的範圍規則。

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

注意

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