Есть несколько статей о том, как избежать автоинструментов для небольших проектов и использовать всю мощь GNU Make:
- http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
- http://david.rothlis.net/large-gnu-make/
Я хотел бы что-то, на что опирается wildcard
и встроенные неявные правила, насколько это возможно.
Есть ли готовые скрипты для GNU Make, которые я могу использовать?
Функции, которые мне нужны (см. Вторую ссылку для описания):
- Укажите стандартные цели
- Стандартные переменные среды
- Автоматические зависимости от заголовочных файлов C и C ++
- Используйте неявные правила
- Зависимости от сторонних пакетов: pkg-config
Приятно иметь, но не обязательно для меня:
- Мелкозернистые зависимости
- Обнаружить изменения в окружающей среде
- Чистый вывод
- Отдельный каталог сборки
3
Решение
Взгляните на мою библиотеку шаблонов под названием прораб:
https://github.com/igagis/prorab/blob/master/wiki/HomePage.md
Он имеет большинство необходимых вам функций, а также включает в себя независимые make-файлы, которые используют одну и ту же библиотеку шаблонов.
Особенности:
- Предоставить стандартные цели: Предоставляет цели для компиляции файлов .c и .cpp, связывания двоичной, динамической или статической библиотеки. Также предоставляет цели: все, очистить, установить, удалить
- Стандартные переменные среды: Поддерживает CC, CXX, CFLAGS, CPPFLAGS, CXXFLAGS, LDFLAGS, LDLIBS, PREFIX, DESTDIR
- Автоматические зависимости от заголовочных файлов C и C ++: да. * .d информация, сгенерированная GCC используется.
-
Зависимости от сторонних пакетов: pkg-config: просто пройдите `pkg-config --libs yourPackage`
к LDLIBS, например.
-
Мелкозернистые зависимости: да, все зависит от необходимых вещей.
- Обнаружение изменений в среде: поддерживает зависимость от флагов компиляции / компоновки
- Чистый вывод: да, при необходимости можно включить «полный» выход.
- Отдельный каталог сборки: объектные файлы помещаются в отдельный каталог, который вы можете переопределить.
Не стесняйтесь обращаться ко мне, если возникнут вопросы или отправить вопрос с вопросом на GitHub.
0
Другие решения