LLVM相当于在命令行上使用gcc -D宏定义

25
我正在寻找LLVM(或clang)的相当于gcc的-D标志的东西,它可以在命令行上启用宏定义。
任何指针都将是很好的。
2个回答

35

clang --cc1 --help 命令中得知:

...
-D <macro>=<value>      Define <macro> to <value> (or 1 if <value> omitted)
...

作为经验法则,假定Clang在模拟GCC,除非有证据证明相反!


你使用的是哪个版本的clang?我的是3.3,当我执行“clang -cc1 --help”时,我没有看到那个选项。 - shrm
@mishr:啊,我现在好像有3.1版本。不过他们改变/删除这样一个基本选项的可能性很小... - Oliver Charlesworth
1
我倾向于同意不太可能的部分,但该选项在帮助中未显示。 - shrm

7

默认的 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;
}

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

我已经在做这件事了。由于我正在使用makefile,所以我执行命令make cc=/path/to/clang。我希望这是正确的。 - shrm
@mishr:一般来说,只需将gcc替换为clang即可,但特定情况和构建顺序有陷阱。你是否遇到了特定的错误?因为-D确实有效。 - Eli Bendersky
是的,-D选项有效,这就是为什么我接受了上面的答案。顺便说一下,编译正在进行中,链接尚未完成,因此没有生成可执行文件。 - shrm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接