LINK_LIBRARIES¶
直接链接依赖项列表。
此属性指定将用于链接的库或目标列表。除了接受来自 target_link_libraries() 命令的值外,还可以使用 set_property() 命令直接在任何目标上设置值。
此属性的值由生成器用于为目标构建链接规则。直接链接依赖项首先链接,然后是来自直接依赖项的 INTERFACE_LINK_LIBRARIES 属性的传递闭包的间接依赖项。请参阅策略 CMP0022。
LINK_LIBRARIES 的内容可以使用语法 $<...> 的 生成器表达式。策略 CMP0131 会影响 LINK_ONLY 生成器表达式在此属性上的行为。
有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7) 手册。
注意
调用 target_link_libraries(<target> ...) 可能会更新 <target> 上的此属性。如果 <target> 未在调用所在的同一目录中创建,则 target_link_libraries() 会将每个条目包装成 ::@(directory-id);...;::@ 的形式,其中 ::@ 是字面量,而 (directory-id) 未指定。这会告诉生成器,指定的库必须在调用者的作用域中查找,而不是在创建 <target> 的作用域中查找。install(EXPORT) 和 export() 命令在导出时会剥离有效的目录 ID。
在高级用例中,此属性指定的直接链接依赖项列表可能会由依赖项的使用要求更新。请参阅 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: 前缀。