add_link_options¶
3.13 版本新增。
为当前目录及以下在调用此命令后添加的可执行文件、共享库或模块库目标添加链接选项。
add_link_options(<option> ...)
此命令可用于添加任何链接选项,但存在用于添加库的替代命令(target_link_libraries() 或 link_libraries())。请参阅目录和目标LINK_OPTIONS属性的文档。
注意
此命令不能用于为静态库目标添加选项,因为它们不使用链接器。要添加归档器或MSVC库管理员标志,请参阅STATIC_LIBRARY_OPTIONS目标属性。
add_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: 前缀。
另请参阅¶
CMAKE_<LANG>_FLAGS和CMAKE_<LANG>_FLAGS_<CONFIG>会添加传递给所有编译器调用的语言级标志。这包括驱动编译和驱动链接的调用。