什么是-D编译器标志C++(clang,GNU,MSVC)

What is the -D compiler flag C++ (clang, GNU, MSVC)

本文关键字:clang GNU MSVC C++ 编译器 标志 什么      更新时间:2023-10-16

好的,我假设-D前缀意味着#define,不管后面跟着什么变量名,但我找不到任何关于编译器标志的makefile功能的文档。

CXX=clang -DTHISISPREPROCESSORVARIABLE

因此,生成过程中的-DTHISISPREPROCESSORVARIABLE将定义预处理器变量THISISPREPROCESSORVARIABLE,并编译后续的cout

#ifdef THISISPREPROCESSORVARIABLE
     std::cout << "this should exist with the -D" << endl;
#endif

这是正确的假设吗?它似乎有效,只是有人能确认这个-D指的是#define吗?(有人链接到一些可以填写所有这些命令定义的makefile文档吗?)

GCC,MSVC,以及英特尔,所有这些都记录了这个标志,Clang默认情况下只使用GCC标志。我刚刚在Clang的帮助页面waaaay底部找到了它(对于windows的Clang cl),harmic在这里更清楚地找到了它。

执行clang-cl /?以查看支持的选项列表:
/D <macro[=value]>定义宏

harmic观察到,这些是编译器标志,与makefile完全无关,这就是为什么在makefile文档中找不到它的原因。这些标志可以放在生成文件中,生成文件会将它们传递给编译器,但它们不是生成文件的一部分。