我有几个库源代码文件,分别组织在一个单独的目录中(在我的项目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.c
和file_spi.c
。
是否可以使用列表仅使用我需要的源代码文件? 例如,我想要的是这样的:
MODULES = spi clock
C_SRC += $(wildcard /path/to/libsrc/*$(MODULES)*.c)
但是这不起作用,因为MODULE
是用空格分隔的单词列表。
如果可能的话,我该如何实现?
答案 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))
这将是最推荐的方法,而不是过滤