Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ add_compile_选项和add_link_选项之间的区别还标记了每个选项所支持的_C++_Cmake_Compilation_Linker_Linker Flags - Fatal编程技术网

C++ add_compile_选项和add_link_选项之间的区别还标记了每个选项所支持的

C++ add_compile_选项和add_link_选项之间的区别还标记了每个选项所支持的,c++,cmake,compilation,linker,linker-flags,C++,Cmake,Compilation,Linker,Linker Flags,多年来,我一直在使用.bat文件构建我的应用程序。最近,由于它的优雅,我切换到了CMake,我遇到了一种情况,我不得不猜测我应该放在CMake的add\u link\u选项和add\u compile\u选项 我在BAT文件中使用的示例标志 -s WASM=1 --bind -s MODULARIZE=1 而且,在CMake中,该标志已成为(经过反复试验) 老实说,我找不到任何有关add\u link\u options和add\u compile\u options支持的标志的信息 我知道什

多年来,我一直在使用
.bat
文件构建我的应用程序。最近,由于它的优雅,我切换到了CMake,我遇到了一种情况,我不得不猜测我应该放在CMake的
add\u link\u选项
add\u compile\u选项

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

-s WASM=1 --bind -s MODULARIZE=1
而且,在CMake中,该标志已成为(经过反复试验)

老实说,我找不到任何有关
add\u link\u options
add\u compile\u options
支持的标志的信息

我知道什么是链接器,但当涉及到
add\u link\u选项
或链接器标志时,我就不知道了


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

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


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

我不确定您的问题是什么,但以下是一个Wasm项目的完整工作示例,该项目设置了项目范围的严格模式并禁用异常支持:

if (EMSCRIPTEN)
    add_compile_options(-fno-exceptions "SHELL:-s STRICT=1")
    add_link_options("SHELL:-s STRICT=1")
endif()
特别要注意的是,由于它在中有一个
[compile+link]
标记,
-s STRICT=1
必须用于编译和链接,因此它出现在每个中


如果(EMSCRIPTEN)周围有
if,因为这个项目也可以为Windows和Linux构建。

Nothing。您不应该使用这些变量,而应该使用
target.*
变量。但更一般地说,请阅读一本好的指南,比如我也有target_*变体,而且由于我有多个目标,所以它们之间必须共享公共标志。但无论是目标还是非目标,我仍然不知道如何处理标志。当运行
makeclean&&makeverbose=1
时,是否将编译和链接显示为两个独立的步骤?它是否在链接器命令中显示
--bind
,在编译器命令中显示
WASM=1
?使用
-c
运行的命令是编译,而不是链接。在我看来,您传递的3个选项可能都属于编译器阶段,但我可能错了。如果您告诉我们您的项目是否正在建设中,或者是否存在问题,这会有所帮助,它是什么。我使用的是Emscripten,我相信它使用的是Clang。我已经阅读了文档,但它缺少这些信息,这就是为什么我首先发布这个问题的原因。您能否编辑您的问题,以包括旧.bat文件中的特定标志,您不确定如何将其集成到CMake中?也许还可以尝试使用你的CMake项目
make VERBOSE=1
,看看它在哪里传递了哪些选项,并将这些选项与你的旧.bat文件进行比较。我已经集成了所有内容,但只是对猜游戏感到不舒服。我将编辑并包含标志。我只是将它们添加到post中。而-s STRICT=1的行为使其他标志不能以这种方式使用。我只需要知道在编译和链接器阶段应该传递哪些标志。只需在文档中查找它们。Clang文档在这里:emscripten flags文档在这里:您检查过了吗?你凭什么认为我没有检查那些?是的,但它们不包含任何信息。Github one包含它们。我最初使用他们的网站文档。现在一切都清楚了。若你们能写下答案,我会接受的。总体来说,emscripten文档是不错的,但一些技术细节比它们应该的更难找到。在
-s OPTION[=VALUE]
的文档中,该页面的链接位于上方约2页的位置。
if (EMSCRIPTEN)
    add_compile_options(-fno-exceptions "SHELL:-s STRICT=1")
    add_link_options("SHELL:-s STRICT=1")
endif()