使用Make的条件语句

时间:2018-05-30 18:55:54

标签: makefile

我在make中遇到条件语句问题。关于SO的现有问题仅适用于Makefile中的最高级别。

这就是我所拥有的:

.PHONY: all

all: bar/*.o

bar/%.o: foo/%.cc
ifeq (,$(wildcard $(@D)))
    @echo $(wildcard $(@D))
endif

fooa.ccb.cc下有两个空文件。文件夹bar已存在。

这是输出:

PS C:\Users\cbrown2\Src> mingw32-make
bar
bar

即使ifeq提供$(wildcard $(@D)),也会输入bar语句。

是什么给出了?

1 个答案:

答案 0 :(得分:1)

你不能以这种方式使用条件。当make评估你的条件自动变量时,还没有值。所以make会看到:

bar/%.o: foo/%.cc
    @echo $(wildcard $(@D))

因为$(@D)扩展为空字符串。当make将配方传递给shell时,它将首先展开$(@D),这次的值为bar

一方注意与您的问题无关:当bar尚未包含所有目标文件时,

all: bar/*.o

不会做你想要的。你可能想要的是:

SRC := $(wildcard foo/*.cc)
OBJ := $(patsubst foo/%.cc,bar/%.o,$(SRC))

all: $(OBJ)