【问题标题】:LLVM equivalent of gcc -D macro definition on commandlineLLVM 等效于命令行上的 gcc -D 宏定义
【发布时间】:2013-03-13 12:51:55
【问题描述】:

我正在寻找与 gcc 的 -D 标志等效的 LLVM(或 clang),它可以在命令行中启用宏定义。

任何指针都会很棒。

【问题讨论】:

    标签: llvm clang llvm-gcc


    【解决方案1】:

    来自clang --cc1 --help

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

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

    【讨论】:

    • 您使用的是哪个版本的 clang?我的是 3.3,当我做 clang -cc1 --help 时我看不到那个选项。
    • @mishr:啊,我现在好像有 3.1。不过,他们不太可能更改/删除这样一个基本选项......
    • 我倾向于同意不太可能的部分,但帮助中没有显示该选项。
    【解决方案2】:

    默认的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。我希望这是正确的。
    • @mishr:一般来说,只需用 clang 替换 gcc 就可以了,但是对于特定情况和构建序列有一些警告。你有什么特别的错误吗?因为 -D 确实工作。
    • 是的 -D 有效,这就是我接受上述答案的原因。 BTW 编译正常,链接没有完成,因此没有生成可执行文件。
    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2015-10-29
    • 2016-01-26
    • 2016-10-02
    • 2012-02-24
    相关资源
    最近更新 更多