是否可以在makefile中定义C宏?

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

相应于linux上的cc manpage

 -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. 

编辑您的Makefile以显示

CFLAGS = -D VAR1 -D VAR2 = *某事*

如果您在Makefile中使用默认规则,则应该自动运行。 如果你不这样做,并且明确地调用C编译器,那么请确保你正在写一些东西

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

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

最佳实践包括使用CPPFLAGS而不是CFLAGS ,并使用+=而不是= ; 但是对这些function的支持并不像上面那样普遍,并且取决于你的make系统。

是。

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