【发布时间】:2011-07-15 05:09:57
【问题描述】:
是否可以将等价的#define VAR(在 C 程序中)放入 makefile 中,以便可以控制应编译程序的哪一部分?
【问题讨论】:
标签: c makefile compilation
是否可以将等价的#define VAR(在 C 程序中)放入 makefile 中,以便可以控制应编译程序的哪一部分?
【问题讨论】:
标签: c makefile compilation
是的。
大多数编译器都支持指定#define 的命令行选项。对于 Visual C++,这是/D option。
【讨论】:
-D 被一些最早的 C 编译器使用,并且几乎被普遍接受。我能想到的唯一与通用几乎一样接近的其他人是-c,也许还有-O。
cl)都接受/ 和- 作为参数前缀。这意味着您可以使用-D 并兼容cl 以及gcc。
根据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.
【讨论】:
c99 命令指定 -D,这是 C 编译器的标准名称:pubs.opengroup.org/onlinepubs/9699919799/utilities/c99.html
编辑您的Makefile 以显示
CFLAGS=-D VAR1 -D VAR2=*something*
如果您在 Makefile 中使用默认规则,这应该会自动工作。如果您不这样做,并且正在显式调用 C 编译器,请确保您正在编写类似
的内容$(CC) $(CFLAGS) -c -o $@ $
如果CFLAGS=...above 可以在命令行上使用而不是写在 Makefile 中,那就更可爱了(阅读man(1) 手册页);这允许在最后时刻轻松重新配置编译参数,但不会保留参数。
最佳做法包括使用CPPFLAGS 代替CFLAGS,以及使用+= 代替=;但是对这些功能的支持不如上述通用,并且取决于您的制作系统。
【讨论】: