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
变量的值给出。
例如,"LINKER:-z,defs"
对于 Clang
变为 -Xlinker -z -Xlinker defs
,对于 GNU GCC
变为 -Wl,-z,defs
。
LINKER:
前缀可以作为 SHELL:
前缀表达式的一部分指定。
LINKER:
前缀支持使用 SHELL:
前缀和空格作为分隔符的替代语法来指定参数。前面的示例将变为 "LINKER:SHELL:-z defs"
。
注意
不支持在 LINKER:
前缀的开头以外的任何位置指定 SHELL:
前缀。