У меня есть этот Makefile (сокращенно):
COMPILE = armcc
LINK = armlink
SRCDIR := ./src1 \
./src2
INCLUDES := -I ./inc
CSRC := $(wildcard $(SRCDIR)/*.c)
# CSRC := ./src1/*.c ./src2/*.c
OBJS := $(CSRC:.c=.o)
.PHONY: clean
clean:
@echo "Clean Finished"
%.o: %.c
@echo Compiling $<
@$(COMPILE) $(INCLUDES) $< -o $@
mktest: $(OBJS) Makefile
@echo $(CSRC)
@echo $(OBJS)
@echo building mktest
@$(LINK) -o mktest.axf
Когда я запускаю его, подстановочный знак расширяется только для последней записи в переменной SRCDIR, которая является ./src2. Вывод показан ниже.
c:> make mktest
./src1 ./src2/file2.c
./src1 ./src2/file2.o
building mktest
Если я заменю строку, в которой определен CSRC, строкой под ней. Работает нормально, а вывод показан ниже.
c:> make mktest
./src1/*.c ./src2/*.c
./src1/*.o ./src2/*.o
building mktest
Это нормально, если у меня есть только несколько подкаталогов, которые я хочу включить. Но если я захочу добавить больше, Makefile станет безобразным. Я не правильно использую здесь подстановочный знак?