ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
483725
fk0, легенда (27.01.2014 21:24, просмотров: 263)
Хочется проект разделить на набор библиотек, лежаших в своих каталогах, со своими Makefile. Вообще хотелось бы, чтоб при make в каталоге с библиотекой собирался тест, например (отдельная программа) для отладки библиотеки. А для использования библиотеки в проекте, например, делается include path/library и далее сразу волшебным образом при сборке проекта собираются все *.o, собирается *.a и т.п... Проблемы. Разные платформы возможны. Т.е. нельзя в Makefile написать какие-то правила общие на все случаи жизни. Можно только написать зависимости, можно написать присвоение CPPFLAGS. А правила типа %.o: %.c и т.п. уже платформо-специфичные и должны делаться в Makefile специфичном для проекта, но не для библиотеки. Как быть? Пока додумался для такого. В Makefile для библиотеки пишу ifeq ($(words $(MAKEFILE_LIST)),1)... и правила для сборки теста, endif, правила общие для всех (только зависимости и присвоения переменных, но нет собственно правил, ибо они специфичные). А в Makefile проекта приходится описывать правила %.o: %.c, %.a:; ar rcs... добавление .a в зависимости для проекта, добавление каталогов с библиотеками в -I для проекта, и добавление в VPATH (иначе не знает где .c искать чтоб .a собрать), include path/lib/Makefile для самого make. И при всём этом автоматически не могут генерироваться зависимости: потому, что список .o для проекта знает и пытается делать все .d. Список .a тоже знает, но надо для всех .a, для всех .o (которые внутри .a) получить .d. Не представляю как это записать. Разве что написать name.a: $(modules:%.c=%.d) в Makefile специфичный для бибилиотеки. Как поступают в таких случаях вообще?
[ZX]