У нас есть большая база кода, которую я конвертирую в autotools, чтобы помочь настроить несколько платформ/конфигураций. В основном, мы имеем:Настройка Autotools для статических и общих библиотек
|-- configure.ac
|-- Makefile.am
|-- dependency1
| `-- Makefile.am
|-- dependency2
| `-- Makefile.am
`-- dependency3
`-- Makefile.am
папки зависимостей являются общими для многих проектов, таким образом, Makefile.am
файлы будут создавать libdependencyX.la
файлы. В корне Makefile.am
я затем использую LIBADD
, чтобы объединить все, чтобы создать окончательную общую библиотеку. Это все работает.
У нас есть необходимость создания как общих, так и статических версий нашей библиотеки. Как я могу это сделать? Все зависимости просто используют LTLIBRARIES
, чтобы сделать все.
Исходное решение было просто гигантским файлом Makefile, который создал серию файлов .o
, а затем создал итоговый результат .so
или .a
в конце.
Обновление 2015-03-11
Проблема у меня в том, что я могу получить статический или совместно, но не оба. Корень Makefile.am
выглядит так для финальной библиотеки.
lib_LTLIBRARIES = libroot.la
libroot_la_SOURCES = root.c
libroot_la_LIBADD = dependency1/libdependency1.la \
dependency2/libdependency2.la \
dependency3/libdependency3.la
libroot_la_LDFLAGS = -shared
Переключение -shared
в -static
дает мне .a
, но как я могу получить оба? --enable-shared/--enable-static
, похоже, ничего не меняет.
http://www.gnu.org/software/automake/manual/html_node/A-Library.html? –
Почему не просто '--enable-static' с'./Configure'? Или создайте оба по умолчанию: ['LT_INIT'] (http://www.gnu.org/software/libtool/manual/libtool.html#LT_005fINIT) –