CMP0023¶
普通和关键词 target_link_libraries()
签不能混用。
CMake 2.8.12 引入了 target_link_libraries()
签名,使用 PUBLIC
、PRIVATE
和 INTERFACE
关键词,概括了 CMake 2.8.7 中引入的 LINK_PUBLIC
和 LINK_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 中被删除
。