LINK_LIBRARIES¶
直接链接依赖项的列表。
此属性指定用于链接的库或目标的列表。除了接受来自 target_link_libraries()
命令的值之外,还可以使用 set_property()
命令直接在任何目标上设置值。
生成器使用此属性的值来构建目标的链接规则。直接链接依赖项首先被链接,然后是来自直接依赖项的传递闭包的间接依赖项的 INTERFACE_LINK_LIBRARIES
属性。参见策略 CMP0022
。
LINK_LIBRARIES
的内容可以使用带有语法 $<...>
的 generator expressions
。策略 CMP0131
影响此属性的 LINK_ONLY
生成器表达式的行为。
有关定义构建系统属性的更多信息,请参见 cmake-buildsystem(7)
手册。
注意
调用 target_link_libraries(<target> ...)
可能会更新 <target>
上的此属性。如果 <target>
不是在与调用相同的目录中创建的,则 target_link_libraries()
将使用 ::@(directory-id);...;::@
形式包装每个条目,其中 ::@
是字面量,(directory-id)
是未指定的。这告诉生成器,命名库必须在调用者的作用域而不是创建 <target>
的作用域中查找。有效的目录 ID 在通过 install(EXPORT)
和 export()
命令导出时被剥离。
在高级用例中,此属性指定的直接链接依赖项列表可能会被来自依赖项的使用要求更新。请参见 INTERFACE_LINK_LIBRARIES_DIRECT
和 INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE
目标属性。
有关 CMake 如何在链接器命令行上排序直接链接依赖项的详细信息,请参见 CMAKE_LINK_LIBRARIES_STRATEGY
变量和相应的 LINK_LIBRARIES_STRATEGY
目标属性。
处理编译器驱动程序差异¶
在 4.0 版本中添加。
要将选项传递给链接器工具,每个编译器驱动程序都有自己的语法。LINKER:
前缀和 ,
分隔符可以用于以可移植的方式指定要传递给链接器工具的选项。LINKER:
被替换为适当的驱动程序选项,,
被替换为适当的驱动程序分隔符。驱动程序前缀和驱动程序分隔符由 CMAKE_<LANG>_LINKER_WRAPPER_FLAG
和 CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP
变量的值给出。
例如,"LINKER:-z,defs"
对于 Clang
变为 -Xlinker -z -Xlinker defs
,对于 GNU GCC
变为 -Wl,-z,defs
。
LINKER:
前缀支持使用 SHELL:
前缀和空格作为分隔符来指定参数的替代语法。之前的示例变为 "LINKER:SHELL:-z defs"
。
注意
不支持在 LINKER:
前缀的开头以外的任何位置指定 SHELL:
前缀。