CMake add_compile_options 是不是会在适当时影响链接器选项?

Posted

技术标签:

【中文标题】CMake add_compile_options 是不是会在适当时影响链接器选项?【英文标题】:Does CMake add_compile_options affect linker options when appropriate?CMake add_compile_options 是否会在适当时影响链接器选项? 【发布时间】:2015-04-17 15:03:33 【问题描述】:

某些编译器选项实际上可能需要额外的 link 选项才能真正生效。例如,要启用GCC's Link Time Optimization,-flto 选项必须同时在编译命令链接命令中传递。

有一个漂亮的builtin cmake command 用于添加编译选项,但据我所知,链接选项没有相应的命令。即使有,当我使用的编译选项隐含它们时需要显式指定它们也会很烦人。

那么add_compile_options(-flto) 是否将-flto 添加到link 命令?如果没有,我需要直接set(LINK_FLAGS ....吗?

【问题讨论】:

【参考方案1】:

add_compile_optionstarget_compile_options不会传递给链接器。

你可以(ab)使用target_link_libraries for this purpose:

以 - 开头但不是 -l 或 -framework 的项目名称被视为 链接器标志。

【讨论】:

嗯。我真的更喜欢(现在)在我的项目中全局设置选项,你说得对,在这里使用target_link_libraries 似乎是一种滥用,至少在语义上是这样。不过很好的解决方案。 ....您没有任何机会设法让-flto 在您的任何项目中使用 CMake,是吗?【参考方案2】:

这可以使用add_link_options() 在 cmake 3.13 及更高版本中完成。

【讨论】:

以上是关于CMake add_compile_options 是不是会在适当时影响链接器选项?的主要内容,如果未能解决你的问题,请参考以下文章

CMake中add_compile_options/target_compile_options的使用

CMake中add_compile_options/target_compile_options的使用

CMake基础教程(17)add_compile_options添加编译选项(-g -Werror)

CMake add_compile_options 是不是会在适当时影响链接器选项?

c++ 20 协程 cmakefile 文件写法

具有覆盖范围的 CMake ninja 将 gcno 文件放在根二进制目录中