LINK_OPTIONS¶
3.13 版本新增。
用于共享库、模块和可执行目标链接步骤以及设备链接步骤的选项列表。静态库目标需要使用 STATIC_LIBRARY_OPTIONS 目标属性。
这些选项用于普通链接和设备链接(请参阅策略 CMP0105)。要控制普通和设备链接步骤的链接选项,可以使用 $<HOST_LINK> 和 $<DEVICE_LINK> 生成器表达式。
此属性包含到目前为止为其目标指定的选项的分号分隔列表。使用 target_link_options() 命令添加更多选项。
此属性由创建目标时LINK_OPTIONS 目录属性初始化,并由生成器用于设置编译器的选项。
LINK_OPTIONS 的内容可以使用“生成器表达式”,其语法为 $<...>。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7) 手册。
注意
此属性必须优先于 LINK_FLAGS 属性使用。
主机和设备特定链接选项¶
在版本 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 变量的值给出。
例如,对于 Clang,"LINKER:-z,defs" 会变成 -Xlinker -z -Xlinker defs;对于 GNU GCC,则会变成 -Wl,-z,defs。
LINKER: 前缀可以作为 SHELL: 前缀表达式的一部分指定。
LINKER: 前缀支持使用 SHELL: 前缀和空格作为分隔符来指定参数,作为一种替代语法。前面的示例将变为 "LINKER:SHELL:-z defs"。
注意
不支持在 LINKER: 前缀的开头以外的任何位置指定 SHELL: 前缀。