gmake ifeq比较没有给出预期的结果

时间:2013-05-13 12:59:54

标签: compilation makefile conditional gnu-make

我有一个复杂的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失败了。为什么?引用怎么样?

1 个答案:

答案 0 :(得分:0)

根据你在这里输入的内容,它应该可以工作(我将其剪切并粘贴到一个对我有用的测试文件中),这可能意味着你的真实环境与这个例子有所不同。您能告诉我们您使用变量all_csrc的位置吗?也许这就是问题,而不是变量的分配。

确保没有任何尾随空格。确保变量和值中具有匹配的大小写(make,就像所有UNIX工具一样,区分大小写)。您可以尝试将$(info ...)语句添加到makefile中,它将打印出它正在执行的操作。将一个放在ifeq内以查看是否会触发,并在endif之后查看USR_CSRC的值是什么。

另外,一般来说,在if语句或函数调用(如foreach)中添加空格并不是一个好主意。在上述情况下,它应该无关紧要,但总的来说最好避免。