Лично у меня никогда не было проблем с перечислением всех файлов вручную. Добавление файла в make-файл занимает незначительное время по сравнению с добавлением заполнения его полезным содержимым.
Чтобы получить все файлы из разных каталогов, можно предложить использовать wildcard
function . Таким образом, my_sources:=$(wildcard *.cpp dir1/*.cpp)
сделает переменную, содержащую исходные файлы, которые соответствуют шаблонному выражению.
Однако я нахожу это менее удобным, чем использование обычной команды Linux find
через оболочку:
# Find all sources
my_sources:=$(shell find -iname '*.cpp')
# Make targets out of them
OBJS=$(my_sources:%.cpp=%.o)
Поиск более мощный, чем встроенный в Make wildcard
. Возможно, вы также захотите использовать другие возможности оболочки, например, конвейеры, для фильтрации вывода find
(если функции Make filter-out
недостаточно). Или как-то так, чтобы избежать чрезмерных переменных:
OBJS:=$(shell find -iname '*.cpp' | sed 's/\.cpp$/.o/')
Вы называете это!