add_compile_options 和 add_link_options 之间的区别还标记了每个选项支持

Difference between add_compile_options and add_link_options also flags each option supports

多年来我一直在使用 .bat 文件来构建我的应用程序。最近,因为它的优雅而切换到 CMake,我 运行 陷入了一种情况,我不得不猜测我应该放入 CMake 的 add_link_optionsadd_compile_options

的标志

我在 BAT 文件中使用的示例标志,

-s WASM=1 --bind -s MODULARIZE=1

并且,在 CMake 中,此标志已变为(经过反复试验),

add_compile_options("SHELL: -s WASM=1")
add_link_options("SHELL: --bind")
add_link_options("SHELL: -s MODULARIZE=1")

老实说,我找不到任何关于 add_link_optionsadd_compile_options 支持的标志的信息。

我知道什么是链接器,但在涉及到 add_link_options 或链接器标志时就迷失了。

我习惯在单行中编译所有内容,现在在 CMake 中,所有内容似乎都涉及单独的步骤。

您可以传递给编译器或链接器的选项取决于您使用的编译器或链接器。例如,如果您 fork GCC 并添加一个 -WWhosebug-copy-pasta 选项,您可以将该选项传递给 add_compile_options(),但其他使用标准 GCC 的人不能。

所以你的问题的答案似乎是,阅读你的编译器和链接器文档。

我不确定你的问题是什么,但这里有一个来自 Wasm 项目的完整工作示例,它设置了项目范围的严格模式并禁用了异常支持:

if (EMSCRIPTEN)
    add_compile_options(-fno-exceptions "SHELL:-s STRICT=1")
    add_link_options("SHELL:-s STRICT=1")
endif()

请特别注意,因为它在 emscripten settings 中有一个 [compile+link] 标记,所以 -s STRICT=1 必须用于编译和链接,因此它出现在每个。

周围的if(EMSCRIPTEN)是因为这个项目也可以为Windows和Linux构建。