Вы не можете использовать условные выражения таким образом.Когда make оценивает ваши условные автоматические переменные еще не имеют значения.Так что make увидит:
bar/%.o: foo/%.cc
@echo $(wildcard $(@D))
, потому что $(@D)
раскрывается как пустая строка.И когда make передает рецепт оболочке, он сначала расширяется $(@D)
, который на этот раз имеет значение: bar
.
Примечание, которое не имеет ничего общего с вашей проблемой: когда bar
пока не содержит все объектные файлы,
all: bar/*.o
не будет делать то, что вы, вероятно, хотите.Что вы, вероятно, хотите, это:
SRC := $(wildcard foo/*.cc)
OBJ := $(patsubst foo/%.cc,bar/%.o,$(SRC))
all: $(OBJ)