我在make中遇到条件语句问题。关于SO的现有问题仅适用于Makefile中的最高级别。
这就是我所拥有的:
.PHONY: all
all: bar/*.o
bar/%.o: foo/%.cc
ifeq (,$(wildcard $(@D)))
@echo $(wildcard $(@D))
endif
foo
,a.cc
和b.cc
下有两个空文件。文件夹bar
已存在。
这是输出:
PS C:\Users\cbrown2\Src> mingw32-make
bar
bar
即使ifeq
提供$(wildcard $(@D))
,也会输入bar
语句。
是什么给出了?
答案 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)