我有一个复杂的makefile,我想改变,我对make不太了解。
BUILD_TYPE = SERVER
BAS_CSRC = a.c \
b.c \
c.c
我想要做的是有条件地向BAS_CSRC添加东西,如下所示:
ifeq ($(BUILD_TYPE), SERVER)
USR_CSRC = $(BAS_CSRC) \
d.c \
e.c
endif
all_csrc = $(USR_CSRC) $(foreach var, $(COMMON_OBJECTS), $($(var)_csrc))
但是当我编译d.c和e.c时只是被忽略所以ifeq失败了。为什么?引用怎么样?
答案 0 :(得分:0)
根据你在这里输入的内容,它应该可以工作(我将其剪切并粘贴到一个对我有用的测试文件中),这可能意味着你的真实环境与这个例子有所不同。您能告诉我们您使用变量all_csrc
的位置吗?也许这就是问题,而不是变量的分配。
确保没有任何尾随空格。确保变量和值中具有匹配的大小写(make,就像所有UNIX工具一样,区分大小写)。您可以尝试将$(info ...)
语句添加到makefile中,它将打印出它正在执行的操作。将一个放在ifeq
内以查看是否会触发,并在endif
之后查看USR_CSRC
的值是什么。
另外,一般来说,在if语句或函数调用(如foreach
)中添加空格并不是一个好主意。在上述情况下,它应该无关紧要,但总的来说最好避免。