1

多年来,我一直在使用.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中,所有内容似乎都涉及单独的步骤。

4

2 回答 2

0

我不确定你的问题是什么,但这是一个来自 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 构建。

于 2020-12-13T12:17:37.713 回答
0

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

因此,您的问题的答案似乎是,阅读您的编译器和链接器文档。

于 2020-12-13T02:47:47.693 回答