Как "сказать" компилятору, чтобы файлы искались также и в подкаталогах?

Например, я указываю искать в -I./mysources, но там есть ещё куча подкаталогов. Как прописать поиск и в них, чтобы не писать каждый по отдельности?


Ответы (1 шт):

Автор решения: Ainar-G

Решение, конечно, «на коленке», но у меня работает (POSIX Make):

.POSIX:

SUBDIRS = $$(find . -type d ! -name . | sed -e 's/^/-I/g' | paste -d ' ' -s)

build:
	$(CC) $(SUBDIRS) src.c

Макро SUBDIRS расширяется в команду, которая находит все дочерние директории в рабочей директории кроме ., подставляет перед всеми флаг -I, и соединяет в одну строчку. В вашем случае, наверное, исключать саму директорию ./mysources/ не понадобится.

Если у вас GNU Make, можно вычислить значение один раз вместо вычисления при каждой замене с помощью:

SUBDIRS := $(shell find . -type d ! -name . | sed -e 's/^/-I/g' | paste -d ' ' -s)
→ Ссылка