C 使用makefile取消定义定义的预处理器变量

C 使用makefile取消定义定义的预处理器变量,c,gcc,makefile,C,Gcc,Makefile,在C文件file.C中,我有 #define STUFF 我想要一个Makefile,这样我就可以防止在file.c中定义内容。我只想使用Makefile来控制编译(我不想直接注释掉.c文件中的行) gcc有-D选项。我能行 gcc -D STUFF file.c -o output 用于定义内容;但是我不能取消定义调用gcc或使用Makefile的内容(当然,在Makefile中调用gcc) 有什么提示吗 #define STUFF #ifdef REMOVE_STUFF #undef

在C文件file.C中,我有

#define STUFF
我想要一个Makefile,这样我就可以防止在file.c中定义内容。我只想使用Makefile来控制编译(我不想直接注释掉.c文件中的行)

gcc有-D选项。我能行

 gcc -D STUFF file.c -o output
用于定义内容;但是我不能取消定义调用gcc或使用Makefile的内容(当然,在Makefile中调用gcc)

有什么提示吗

#define STUFF

#ifdef REMOVE_STUFF
#undef STUFF
#endif

然后使用gcc-DREMOVE\u STUFF进行编译…

您需要更改file.c,如果不更改源文件,则无法执行此操作。 e、 g.使之:

#ifdef ENABLE_STUFF
#define STUFF
#endif

并让您的makefile添加
-DENABLE_STUFF
标志

,但在这种情况下,对于没有命令行定义的编译,将不会定义STUFF,这似乎是一项要求(这方面的问题有点不清楚)。您能修改.c文件吗?如果命令行上没有定义,是否需要定义STUFF?有一个相应的命令来定义内容:
-U
。但是,这仅定义在该点上已定义的值(内置或从命令行定义):它不优先于稍后在各种文件中定义的内容。因此,如果使用
-DFOO-UFOO
,则未定义
FOO
。但是您不能从命令行中取消定义源文件中定义的内容。如果
-U
像一个覆盖一样工作,并确保源代码中定义该宏的所有尝试都将被忽略,那就太好了。但它不是。可能是重复的