【问题标题】:Is it possible to define a C macro in a makefile?是否可以在 makefile 中定义 C 宏?
【发布时间】:2011-07-15 05:09:57
【问题描述】:

是否可以将等价的#define VAR(在 C 程序中)放入 makefile 中,以便可以控制应编译程序的哪一部分?

【问题讨论】:

    标签: c makefile compilation


    【解决方案1】:

    是的。

    大多数编译器都支持指定#define 的命令行选项。对于 Visual C++,这是/D option

    【讨论】:

    • 事实上,-D 被一些最早的 C 编译器使用,并且几乎被普遍接受。我能想到的唯一与通用几乎一样接近的其他人是-c,也许还有-O
    • 微软的大多数命令行工具(包括cl)都接受/- 作为参数前缀。这意味着您可以使用-D 并兼容cl 以及gcc
    【解决方案2】:

    根据linux上的cc手册页

    -D name=definition
               The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In
               particular, the definition will be truncated by embedded newline characters.
    

    【讨论】:

    【解决方案3】:

    编辑您的Makefile 以显示

    CFLAGS=-D VAR1 -D VAR2=*something*

    如果您在 Makefile 中使用默认规则,这应该会自动工作。如果您不这样做,并且正在显式调用 C 编译器,请确保您正在编写类似

    的内容

    $(CC) $(CFLAGS) -c -o $@ $

    如果CFLAGS=...above 可以在命令行上使用而不是写在 Makefile 中,那就更可爱了(阅读man(1) 手册页);这允许在最后时刻轻松重新配置编译参数,但不会保留参数。

    最佳做法包括使用CPPFLAGS 代替CFLAGS,以及使用+= 代替=;但是对这些功能的支持不如上述通用,并且取决于您的制作系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多