是否可以测试是否在gnu Makefile中声明了C define?

时间:2010-11-29 23:09:30

标签: c makefile gnu-make

我希望在我的构建中包含不同的目录,这取决于我的项目中是否在.h文件中声明了#define。这可能还是我完全错了?

3 个答案:

答案 0 :(得分:4)

是的,你是。构建系统应该配置代码,反之亦然。您应该为这种选项使用配置脚本(或者可能切换到更高版本的系统:autotools,CMake,QMake ......)。

答案 1 :(得分:4)

其他答案解释了为什么这是一个坏主意。尽管如此,一种方法是通过预处理makefile片段:

foo.mk.in

#ifdef FOO
FOO_DEFINED := y
#else
FOO_DEFINED := n
#endif

Makefile

foo.mk: foo.mk.in
    $(CPP) $(CPPFLAGS) -o $@ $<
include foo.mk
ifeq ($(FOO_DEFINED),y)
$(warning FOO is defined)
else
$(warning FOO is not defined)
endif

答案 2 :(得分:1)

这是有可能的,但你会以错误的方式解决这个问题。包含不同目录的方法是使用不同的make目标。如果您的代码必须了解它们,请在编译器开关中使用-D。或者,如果您的构建需要能够在其他人的系统上运行,那么autoconf之类的东西就可以了。