Автоинструменты: включая встроенную стороннюю библиотеку - PullRequest
1 голос
/ 16 декабря 2011

В настоящее время я работаю над обновлением набора двоичных файлов c ++, каждый из которых использует свой собственный набор файлов Makefile, до чего-то более современного, основанного на Autotools.Однако я не могу понять, как включить стороннюю библиотеку (например, Oracle Instant Client) в процесс сборки / упаковки.

Это что-то действительно простое, что я пропустил?

Изменить, чтобы добавить больше деталей

Моя текущая среда сборки выглядит следующим образом:

/src
    /lib
        /libfoo
            ... source and header files
            Makefile
        /oci #Oracle Instant Client
            ... header and shared libraries
            Makefile
    /bin
        /bar
            ... source and header files
            Makefile
    Makefile
/build
    /bin
    /lib

build.sh

Сегодня build.sh верхнего уровня выполняет следующие шаги:

  1. Запускает Makefile каждой библиотеки и копирует вывод в / build / lib
  2. Запускает Makefile каждого двоичного файла и копирует вывод в / build / bin

EachMakefile имеет набор жестко закодированных путей к различным каталогам.Излишне говорить, что это стало кошмаром для поддержания.Я начал тестировать автоинструменты, но я застрял, пытаясь найти эквивалент копирования /src/lib/oci/*.so в / build / lib для компиляции и компоновки во время компиляции.

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Я выяснил, как это сделать.

Сначала я переключился на нерекурсивную модель.

Затем я внес следующие изменения в configure.am согласно этой странице http://www.openismus.com/documents/linux/using_libraries/using_libraries

AC_ARG_WITH([oci-include-path],
    [AS_HELP_STRING([--with-oci-include-path],
        [location of the oci headers, defaults to lib/oci])],
    [OCI_CFLAGS="-$withval"],
    [OCI_CFLAGS="-Ilib/oci"])
AC_SUBST([OCI_CFLAGS])
AC_ARG_WITH([oci-lib-path],
    [AS_HELP_STRING([--with-oci-lib-path],
        [location of the oci libraries, defaults to lib/oci])],
    [OCI_LIBS="-L$withval -lclntsh -lnnz11"],
    [OCI_LIBS='-L./lib/oci -lclntsh -lnnz11'])
AC_SUBST([OCI_LIBS])

В Makefile.am вы затем используете следующие строки (предполагая двоичный файл с именем foo)

foo_CPPFLAGS = $(OCI_CFLAGS)
foo_LDADD = libnavycommon.la $(OCI_LIBS)

ocidir = $(libdir)
oci_DATA = lib/oci/libclntsh.so.11.1 \
    lib/oci/libnnz11.so \
    lib/oci/libocci.so.11.1 \
    lib/oci/libociicus.so \
    lib/oci/libocijdbc11.so
0 голосов
/ 29 декабря 2011

Автоинструменты не являются системой управления пакетами, и попытка внедрить этот тип функциональности - плохая идея. Вместо того, чтобы включать стороннюю библиотеку в ваш дистрибутив, вы должны просто выполнить скрипт configure для проверки его существования и прервать работу, если требуемая библиотека недоступна. Ответственность за удовлетворение зависимости лежит на пользователе. Затем можно выпустить двоичный пакет, который позволит пользователю использовать систему управления пакетами для упрощения разрешения зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...