我希望在我的构建中包含不同的目录,这取决于我的项目中是否在.h文件中声明了#define。这可能还是我完全错了?
答案 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之类的东西就可以了。