导航

  • 索引
  • 下一页 |
  • 上一页 |
  • CMake 4.3.0 »
  • 文档 »
  • cmake-properties(7) »
  • LINK_LIBRARIES_ONLY_TARGETS

LINK_LIBRARIES_ONLY_TARGETS¶

在版本 3.23 中添加。

强制链接项(如果可以作为目标名称)必须是现有的目标。

将此属性设置为真值,以对 LINK_LIBRARIES 和 INTERFACE_LINK_LIBRARIES 目标属性的内容进行额外的检查,这些属性通常由 target_link_libraries() 填充。 检查也适用于通过其依赖项的 INTERFACE_LINK_LIBRARIES_DIRECT 属性添加到目标的库。 CMake 将验证可能为目标名称的链接项是否确实命名了现有目标。 如果

  • 它不包含 / 或 \,并且

  • 它不以 - 开头,并且

  • (出于历史原因)它不以 $ 或 ` 开头。

此属性由创建非导入目标时 CMAKE_LINK_LIBRARIES_ONLY_TARGETS 变量的值初始化。 可以显式地在导入目标上启用该属性,以检查其链接接口。

在下面的示例中,由于 miLib 不是目标,CMake 将在配置时出现错误

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 接受的项目触发错误。

上一主题

LINK_LIBRARIES

下一主题

LINK_LIBRARIES_STRATEGY

本页

  • 显示源

快速搜索

导航

  • 索引
  • 下一页 |
  • 上一页 |
  • CMake 4.3.0 »
  • 文档 »
  • cmake-properties(7) »
  • LINK_LIBRARIES_ONLY_TARGETS
© 版权所有 2000-2026 Kitware, Inc. 及贡献者。使用 Sphinx 8.2.3 创建。