我有这个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将会变得很丑陋。我在这里没有正确使用通配符函数吗?