2015-03-10 2 views
2

У нас есть большая база кода, которую я конвертирую в 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, похоже, ничего не меняет.

+0

http://www.gnu.org/software/automake/manual/html_node/A-Library.html? –

+2

Почему не просто '--enable-static' с'./Configure'? Или создайте оба по умолчанию: ['LT_INIT'] (http://www.gnu.org/software/libtool/manual/libtool.html#LT_005fINIT) –

ответ

0

Кажется, моя проблема связана с линией libretto_la_LDFLAGS. Оставляя это и используя make install, вы также указываете файлы .a и .so в указанном префиксе.

Смежные вопросы