Я думаю, что раздел руководства, о котором я упоминал (примечание № 5), объясняет это очень хорошо. Я не думаю, что я мог бы сделать лучше.

аюсь создать цели, которые зависят от списка файлов в каталоге с именем цели:

bin/%.out: src/%/ $(shell find src/%/* -type f -iname '*.cpp' -o -iname '*.hpp')
#   Build stuff here

тем не мениеshell find src/%/* ...в конечном итоге расширяется доshell find src//* ..., Сначала я думал, что это потому, что у меня может быть только один целевой шаблон, но даже после удаленияsrc/%/зависимость это закончилось этой же проблемой.

Еще немного контекста: мой каталог содержит каталог 'src', который содержит каталоги. Каждый подкаталог 'src' я рассматриваю как "проект". Когда я собираю, все объектные файлы должны войти вout/src/projname, Я пытаюсь использоватьfind чтобы рекурсивно получить все исходные и заголовочные файлы для проекта. Все двоичные файлы будут идти вbin/projname.out и как таковые, основные зависимости.out файлы вbin которые имеют те же имена, что и их имя проекта. (еслиsrc/abc существует,bin/abc.out это зависимостьall).

Таким образом, для каждого подкаталога вsrcвсе исходные файлы скомпилированы и объектные файлы перемещены вout/projname который в конечном итоге будет связан сbin/projname.out.

ЦСИproj0файлы cpp / hppproj1файлы cpp / hppвнеЦСИproj0объектные файлыproj1объектные файлыбункерproj0.outproj1.out

В данный момент получаем список проектов и список выходных файлов следующим образом:

SRCS := $(shell find src/* -maxdepth 0 -type d)
SRCS_OUT := $(patsubst src/%,bin/%.out,$(SRCS))
...
all: out/ bin/ $(SRCS_OUT)

Проекты могут содержать подкаталоги и тому подобное, поэтому я используюfind в коде в самом верху.

Ответы на вопрос(0)

Ваш ответ на вопрос