GNU Make:基于单词列表创建通配符

时间:2019-06-26 08:51:01

标签: makefile

我有几个库源代码文件,分别组织在一个单独的目录中(在我的项目src中):

/path/to/libsrc/file_clock.c
/path/to/libsrc/file_spi.c
/path/to/libsrc/file_dma.c
/path/to/libsrc/file_i2c.c

等我不需要所有这些。例如,我可能只需要file_clock.cfile_spi.c

是否可以使用列表仅使用我需要的源代码文件? 例如,我想要的是这样的:

MODULES = spi clock
C_SRC += $(wildcard /path/to/libsrc/*$(MODULES)*.c)

但是这不起作用,因为MODULE是用空格分隔的单词列表。 如果可能的话,我该如何实现?

4 个答案:

答案 0 :(得分:3)

多次运行$(通配符...)是一个糟糕的主意。相反,它可能是这样的:

MODULES := spi clock
C_SRC += $(filter $(patsubst %,\%/file_%.c,$(MODULES)),$(wildcard /path/to/libsrc/*.c))

答案 1 :(得分:1)

那又怎么样:

C_SRC += $(wildcard $(patsubst %,/path/to/libsrc/file_%.c,$(MODULES)))

答案 2 :(得分:0)

已解决:

MODULES = spi clock
C_SRC += $(foreach var, $(MODULES), $(wildcard /path/to/libsrc/*$(var)*.c))

答案 3 :(得分:0)

MODULES = spi clock
C_SRC += $(foreach var, $(MODULES), $(wildcard /path/to/libsrc/*$(var)*.c))

这将是最推荐的方法,而不是过滤