INTERFACE_LINK_OPTIONS¶
添加于 3.13 版本。
库的公共链接选项需求列表。
目标可以填充此属性以发布针对目标头文件进行编译所需的链接选项。target_link_options()
命令使用提供给 PUBLIC
和 INTERFACE
关键字的值来填充此属性。项目也可以直接获取和设置此属性。
当使用 target_link_libraries()
指定目标依赖项时,CMake 将从所有目标依赖项中读取此属性,以确定消费者的构建属性。
INTERFACE_LINK_OPTIONS
的内容可以使用“生成器表达式”,其语法为 $<...>
。 有关可用表达式,请参阅 cmake-generator-expressions(7)
手册。 有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7)
手册。
主机和设备特定的链接选项¶
添加于 3.18 版本:当涉及到设备链接步骤时,该步骤由 CUDA_SEPARABLE_COMPILATION
和 CUDA_RESOLVE_DEVICE_SYMBOLS
属性以及策略 CMP0105
控制时,原始选项将被传递到主机和设备链接步骤(对于设备链接,封装在 -Xcompiler
或等效项中)。 用 $<DEVICE_LINK:...>
生成器表达式包装的选项将仅用于设备链接步骤。 用 $<HOST_LINK:...>
生成器表达式包装的选项将仅用于主机链接步骤。
选项去重¶
用于目标的最终选项集是通过累积当前目标的选项及其依赖项的使用要求来构建的。选项集会进行去重以避免重复。
添加于 3.12 版本:虽然去重步骤对于单个选项有利,但它可能会破坏选项组。 例如,-option A -option B
变成 -option A B
。 可以使用类似 shell 的引用以及 SHELL:
前缀来指定一组选项。 SHELL:
前缀会被删除,选项字符串的其余部分将使用 separate_arguments()
UNIX_COMMAND
模式进行解析。 例如,"SHELL:-option A" "SHELL:-option B"
变成 -option A -option B
。
处理编译器驱动程序差异¶
为了将选项传递给链接器工具,每个编译器驱动程序都有自己的语法。 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:
前缀和空格作为分隔符来指定参数,作为替代语法。 那么,前面的示例就变成了 "LINKER:SHELL:-z defs"
。
注意
不支持在 LINKER:
前缀开头以外的任何位置指定 SHELL:
前缀。