Соедините два списка строк в make-файле - PullRequest
1 голос
/ 18 июня 2020

В моем makefile есть переменная, содержащая все исходные файлы:

SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))

Теперь я хочу создать DEPFILES, содержащий те же файлы, что и SOURCES, с двумя основными отличиями:

  1. Каждый файл заканчивается на «.d» вместо «. c»
  2. Каждый файл содержит «.» перед его базовым именем, так что результирующий файл будет скрыт.

Я придумал это выражение, которое работает хорошо: следующие списки:

PRE := $(dir $(SOURCES))
SUF := $(addprefix ".", $(notdir $(SOURCES)))

Вопрос: Как вы объедините эти два списка в make-файле, чтобы результат был равен DEPFILES? Другими словами: как вы попарно объединяете строки из обоих списков?

1 Ответ

2 голосов
/ 18 июня 2020

Вот более простой подход с использованием только make-файла и без оболочки - если я понял ваше требование, хорошо:

SRCS += bob/src1.c fred/src2.c src3.c
DEPS=$(join $(addsuffix ., $(dir $(SRCS))), $(notdir $(SRCS:.c=.d)))

# Some debug:
$(info 1. $(SRCS))
$(info 2. $(SRCS:.c=.d))
$(info 3. $(notdir $(SRCS:.c=.d)))
$(info 4. $(dir $(SRCS)))

.PHONY: all
all:
    @echo SRCS: $(SRCS)
    @echo DEPS: $(DEPS)


Я разбил вывод на шаги, чтобы вы могли видеть, что делает каждая часть - спасает меня до объясните это!

выходы:

1. bob/src1.c fred/src2.c src3.c
2. bob/src1.d fred/src2.d src3.d
3. src1.d src2.d src3.d
4. bob/ fred/ ./
SRCS: bob/src1.c fred/src2.c src3.c
DEPS: bob/.src1.d fred/.src2.d ./.src3.d
...