Я предполагаю, что вы используете (в частности) GNU make (и я полагаю, что вы работаете в какой-то системе POSIX, возможно, в Linux).Потратьте несколько часов, чтобы прочитал документацию .
Тогда у вас может быть
SRCFILES:= $(wildcard */*.c)
(вы можете использовать =
вместо :=
и вам следует прочитать документацию о различиях между ними) или, возможно (конечно, вам следует избегать странных символов, таких как пробелы в путях к файлам)
SRCFILES:= $(shell find -type f -name '*.c')
Возможно, вы захотите определить
OBJFILES:= $(patsubst %.c,%.o,$(SRCFILES))
Кстати, для небольших проектов с несколькими десятками тысяч строк исходного кода, удобнее иметь плоское дерево исходных кодов .См. этот ответ.Ищите также вдохновение в Makefile
существующих свободных программ проектов, например, на github .
Я не уверен, что для вашего небольшого проекта, установкаобъектные файлы в отдельном каталоге имеют смысл.
Узнайте о встроенных правилах make
, изучив вывод make -p
Когда через несколько лет ваш проект станет значительнобольше, вы могли бы занять некоторое время, чтобы реорганизовать это и улучшить сборку.
1038 * Читайте также
Рекурсивные Сделать считаются вредными (мнение есть, возможно, спорно, но, конечно, интересно)
Попробуйте использовать make --trace
и / или remake
с -x
для отладки Makefile
Возможно, вы (ноМне не нравится это для небольших проектов ...) сгенерируйте Makefile
(например, используя autoconf или cmake ) или используйте какой-нибудь другой инструмент для автоматизации сборки , например ниндзя (возможно, с мезон ).
Кстати, если lib/
содержатs код для некоторой библиотеки, читайте Как программировать библиотеку и Как писать общие библиотеки .
Поскольку выиспользуя GCC через make
, прочитайте также главу о Вызов GCC