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

标签 c++ makefile clang gnu

好吧,我假设 -D 前缀表示 #define 后跟任何变量名,但是我找不到关于编译器标志的此 makefile 功能的任何文档.

CXX=clang -DTHISISPREPROCESSORVARIABLE

所以 -DTHISISPREPROCESSORVARIABLE 在 make 过程中将定义预处理器变量 THISISPREPROCESSORVARIABLE 并使后续的 cout 编译。

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

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

最佳答案

GCC , MSVC , 和 Intel , 都记录了这个标志,而 Clang 默认只使用 GCcflags。我刚在 Clang's help page waaaay at the bottom 上找到它(对于 Windows 的 clang-cl)和 harmic发现比较清楚了here适用于 Linux。

Execute clang-cl /? to see a list of supported options:
/D <macro[=value]> Define macro

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

关于c++ - 什么是 -D 编译器标志 C++(clang、GNU、MSVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226874/

相关文章:

c++ - 在类构造函数中初始化结构的正确方法

iOS:在#define 中检查系统版本并做不同的事情,编译器错误

linux - 使用 '-sanitizer-coverage-prune-blocks=0' 运行 honggfuzz 错误

c++ - 在 std::string 中仅将数字转换为 int

c++ - 为什么编译器不能从默认参数中推导出模板类型?

ios - 将 .xcodeproj 转换为 makefile

c++ - 将文件添加到 GNU 依赖列表?

mysql - 如何禁用使用 cmake 的第三方库 (mysql) 的共享对象 (.so) 的生成

编译.C 文件 : Undefined symbols for architecture x86_64

java - 这样做有效吗? (c、c++、java)