命令行上gcc-D宏定义的LLVM等价物

命令行上gcc-D宏定义的LLVM等价物,llvm,clang,llvm-gcc,Llvm,Clang,Llvm Gcc,我正在寻找等价于gcc的-D标志的LLVM(或clang),它支持命令行中的宏定义 任何指针都很好。来自clang--cc1--help: ... -D <macro> Predefine the specified macro ... 。。。 -D预定义指定的宏 ... 根据经验,假设Clang模仿GCC,除非另有证明 默认的clang调用是类似于gcc的编译器驱动程序,支持与gcc相同的选项,包括-D: : ~$ cat test/z.c int f

我正在寻找等价于gcc的-D标志的LLVM(或clang),它支持命令行中的宏定义

任何指针都很好。

来自
clang--cc1--help

...
-D <macro>              Predefine the specified macro
...
。。。
-D预定义指定的宏
...

根据经验,假设Clang模仿GCC,除非另有证明

默认的
clang
调用是类似于gcc的编译器驱动程序,支持与gcc相同的选项,包括
-D

: ~$ cat test/z.c
int foo() {
  return FOOBAR;
}
: ~$ clang -DFOOBAR -E -c test/z.c
# 1 "test/z.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 154 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test/z.c" 2
int foo() {
  return 1;
}
:~$cat测试/z.c
int foo(){
返回FOOBAR;
}
:~$clang-DFOOBAR-E-c测试/z.c
#1“测试/z.c”
# 1 "" 1
# 1 "" 3
# 154 "" 3
# 1 "" 1
# 1 "" 2
#1“测试/z.c”2
int foo(){
返回1;
}

因此,如果您想替换gcc,只需调用
clang
clang-cc1
调用clang的前端组件,而不是通用编译器驱动程序。

您使用的是哪个版本的clang?我的版本是3.3,当我使用
clang-cc1--help
@mishr:啊,我现在的版本好像是3.1。他们不太可能改变/删除这样一个基本选项,尽管……我倾向于同意不太可能的部分,但该选项没有显示在帮助中。我已经这样做了。因为我使用的是makefile,所以我启动命令
makecc=/path/to/clang
。我希望这是正确的。@mishr:一般来说,用clang替换gcc应该是可行的,但是对于特定的情况和构建序列有一些警告。你有什么特别的错误吗?因为-D确实有效。是的-D有效,这就是我接受上面答案的原因。顺便说一句,编译进展顺利,链接没有完成,因此没有生成可执行文件。