Makefile通配符和变量扩展

Makefile通配符和变量扩展,makefile,Makefile,我有这个Makefile(缩写): 如果我将证监会定义的行替换为其下方的行。它工作正常,输出如下所示 c:> make mktest ./src1 ./src2/file2.c ./src1 ./src2/file2.o building mktest c:> make mktest ./src1/*.c ./src2/*.c ./src1/*.o ./src2/*.o building mktest 这是确定的,如果我只有几个子目录,我想包括。但是如果我想包含更多,Makefi

我有这个Makefile(缩写):

如果我将证监会定义的行替换为其下方的行。它工作正常,输出如下所示

c:> make mktest
./src1 ./src2/file2.c
./src1 ./src2/file2.o
building mktest
c:> make mktest
./src1/*.c ./src2/*.c
./src1/*.o ./src2/*.o
building mktest

这是确定的,如果我只有几个子目录,我想包括。但是如果我想包含更多,Makefile将变得丑陋。我在这里没有正确使用通配符函数吗?

您需要的定义是:

CSRC:= $(foreach dir,$(SRCDIR),$(wildcard $(dir)/*))
如果您查看以下内容:

$(通配符模式…

此字符串在makefile中的任意位置使用,替换为与给定文件名模式之一匹配的现有文件名的空格分隔列表

这意味着您的原始行实际上是:

CSRC := $(wildcard src1/ src2/*.c)
即名称与
src1/
src2/*.c
匹配的文件

CSRC := $(wildcard src1/ src2/*.c)