Compilation gmake ifeq比较不能给出期望的结果

Compilation gmake ifeq比较不能给出期望的结果,compilation,makefile,conditional,gnu-make,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 = $(US

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

根据您在此处键入的内容,它应该可以工作(我将其剪切并粘贴到一个对我有效的测试生成文件中),这可能意味着您的真实环境与此示例有所不同。您能告诉我们在哪里使用变量
all\u
?也许这就是问题所在,而不是变量的赋值

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

另外,一般来说,在if语句或函数调用(如
foreach
)中添加空格不是一个好主意。在上述情况下,这不重要,但通常最好避免