GNU Make: создать подстановочный знак на основе списка слов - PullRequest
0 голосов
/ 26 июня 2019

У меня есть несколько файлов исходного кода библиотеки, организованных следующим образом в отдельном каталоге (из моего проекта 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 - это список слов, разделенных пробелами.Как я могу добиться этого, если это возможно?

Ответы [ 4 ]

3 голосов
/ 26 июня 2019

Запуск $ (подстановочный знак ...) несколько раз - ужасная идея.Вместо этого это может быть что-то вроде этого:

MODULES := spi clock
C_SRC += $(filter $(patsubst %,\%/file_%.c,$(MODULES)),$(wildcard /path/to/libsrc/*.c))
1 голос
/ 27 июня 2019

А как же:

C_SRC += $(wildcard $(patsubst %,/path/to/libsrc/file_%.c,$(MODULES)))
0 голосов
/ 26 июня 2019
MODULES = spi clock
C_SRC += $(foreach var, $(MODULES), $(wildcard /path/to/libsrc/*$(var)*.c))

Это был бы самый рекомендуемый подход вместо фильтрации

0 голосов
/ 26 июня 2019

РЕШИТЬ:

MODULES = spi clock
C_SRC += $(foreach var, $(MODULES), $(wildcard /path/to/libsrc/*$(var)*.c))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...