LINK_OPTIONS¶
在 3.13 版本加入.
用于共享库、模块和可执行目标的链接步骤以及设备链接步骤的选项列表。作为静态库的目标需要使用 STATIC_LIBRARY_OPTIONS 目标属性。
这些选项用于正常链接和设备链接(请参阅策略:policy: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 变量的值给出。
例如,"LINKER:-z,defs" 变成``-Xlinker -z -Xlinker defs`` 对于``Clang`` 和``-Wl,-z,defs`` 对于``GNU GCC ``。
LINKER: 前缀可以指定为 SHELL: 前缀表达式的一部分。
作为一种替代语法,LINKER: 前缀支持使用``SHELL:`` 前缀和空格作为分隔符的参数规范。前面的例子变成了``"LINKER:SHELL:-z defs"``。
备注
不支持在 LINKER: 前缀以外的任何地方指定 SHELL: 前缀。