INTERFACE_LINK_LIBRARIES¶
库的公共接口库列表。
此属性包含传递链接依赖项的列表。当目标使用 target_link_libraries()
命令链接到另一个目标时,列出的库(以及递归地它们的链接接口库)也将提供给另一个目标。如果策略 CMP0022
为 OLD
或未设置,则此属性会被 LINK_INTERFACE_LIBRARIES
或 LINK_INTERFACE_LIBRARIES_<CONFIG>
属性覆盖。
生成器在为依赖目标构建链接规则时使用此属性的值。依赖目标的直接链接依赖项(由其 LINK_LIBRARIES
目标属性指定)首先链接,然后是从直接依赖项的 INTERFACE_LINK_LIBRARIES
属性的传递闭包中获得的间接依赖项。参见策略 CMP0022
。
INTERFACE_LINK_LIBRARIES
的内容可以使用带有语法 $<...>
的“生成器表达式”。请参阅 cmake-generator-expressions(7)
手册以获取可用的表达式。有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7)
手册。
注意
调用 target_link_libraries(<target> ...)
可能会更新 <target>
上的此属性。如果 <target>
不是在与调用相同的目录中创建的,则 target_link_libraries()
将使用 ::@(directory-id);...;::@
形式包装每个条目,其中 ::@
是字面的,而 (directory-id)
是未指定的。这告诉生成器,命名的库必须在调用者的作用域中查找,而不是在创建 <target>
的作用域中查找。有效的目录 ID 在通过 install(EXPORT)
和 export()
命令导出时会被剥离。
INTERFACE_LINK_LIBRARIES
为目标的依赖项添加传递链接依赖项。在高级用例中,可以使用 INTERFACE_LINK_LIBRARIES_DIRECT
和 INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE
目标属性来更新目标依赖项的直接链接依赖项。
处理编译器驱动程序差异¶
在版本 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:
前缀。
创建可重定位的软件包¶
请注意,不建议使用依赖项的绝对路径来填充目标的 INTERFACE_LINK_LIBRARIES
。这将把依赖库文件路径硬编码到已安装的软件包中,就像在制作软件包的机器上找到的那样。
有关在为重新分发创建软件包时指定使用要求时必须采取的额外注意事项的讨论,请参阅 cmake-packages(7)
手册的 创建可重定位的软件包 部分。