LINK_LIBRARIES_ONLY_TARGETS¶
添加到版本 3.23 中。
强制链接项目(可以是目标名称)为实际存在目标。
将此属性设置为真值,以针对 LINK_LIBRARIES
和 INTERFACE_LINK_LIBRARIES
目标属性(通常由 target_link_libraries()
填充)执行其他检查。还对通过 INTERFACE_LINK_LIBRARIES_DIRECT
属性添加到目标的从属库执行检查。CMake 将验证实际上可能是目标名称的链接项目是否命名为现有的目标。以下情况下,将项目视为可能的项目名称:
不包含
/
或\
,而且不以
-
开头,而且(由于历史原因)不以
$
或`
开头。
创建非导入目标时,此属性由 CMAKE_LINK_LIBRARIES_ONLY_TARGETS
变量的值初始化。可以在导入的目标上显式启用此属性以检查其链接界面。
在以下示例中,CMake 在配置时将因 miLib
不是一个目标而错误停止运行:
set(CMAKE_LINK_LIBRARIES_ONLY_TARGETS ON)
add_library(myLib STATIC myLib.c)
add_executable(myExe myExe.c)
target_link_libraries(myExe PRIVATE miLib) # typo for myLib
为了按名称链接工具链提供的库,同时强制使用 LINK_LIBRARIES_ONLY_TARGETS
,请使用具有 IMPORTED_LIBNAME
目标属性的 导入 的 接口库
add_library(toolchain::m INTERFACE IMPORTED)
set_property(TARGET toolchain::m PROPERTY IMPORTED_LIBNAME "m")
target_link_libraries(myExe PRIVATE toolchain::m)
另请参见策略 CMP0028
。
注意
如果 INTERFACE_LINK_LIBRARIES
包含生成器表达式,其实际链接项目列表可能取决于正在消耗的目标的类型和属性。在这种情况下,CMake 可能无法始终检测到仅在特定使用者处才会出现的一些缺少目标的名称。具有改进启发式的未来版本的 CMake 可能会针对先前版本的 CMake 所接受的项目开始触发错误。