0

我有一个有点复杂的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))

但是当我编译时 dc 和 ec 只是被忽略了,所以 ifeq 失败了。为什么?引用呢?

4

1 回答 1

0

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

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

此外,一般来说,在 if 语句或函数调用(如foreach. 在上述情况下,这无关紧要,但通常最好避免。

于 2013-05-13T13:44:54.523 回答