Как заставить скрипт configure искать библиотеку

Я пытаюсь написать файл configure.ac таким образом, чтобы результирующий скрипт configure ищет каталог библиотеки, содержащий заданную статическую библиотеку, например. libsomething.a. Как я могу это сделать? На данный момент я проверяю только одно место с помощью:

AC_CHECK_FILE([/usr/local/lib/libsomething.a],[AC_SUBST(libsomething,"-L/usr/local/lib -lsomething")],[AC_SUBST(libcfitsio,'')])

Но я хочу, чтобы он попытался найти его автоматически. И если библиотека не находится ни в одном из расположений по умолчанию, я хотел бы настроить, чтобы сказать, что библиотека не найдена и что пользовательское расположение может быть указано с помощью --use-something=path, как это обычно делается. Поэтому мне также нужно проверить, указан ли --use-something=path. Я новичок в создании файлов конфигурации, и документацию M4 не очень легко понять, поэтому буду признателен за любую помощь.

Спасибо!


person astrofrog    schedule 30.09.2009    source источник


Ответы (2)


Лучший способ понять это — посмотреть на другие макросы autoconf, которые делают что-то подобное. Макросы Autoconf представляют собой смесь сценария оболочки Bourne и кода M4, поэтому они могут буквально решить любую вычислимую проблему.

Вот ссылка на макрос, который я написал для MySQL++, который делает следующее: mysql++.m4.

person Warren Young    schedule 30.09.2009
comment
спасибо за пример сценария - я смог понять это, используя это! - person astrofrog; 01.10.2009

В задачу configure не входит поиск где установлены библиотеки. он должен только убедиться, что они доступны компоновщику. Если пользователь установил их в другом месте, он знает, как вызвать ./configure CPPFLAGS=-I/the/location/include LDFLAGS=-L/the/location/lib, чтобы инструменты нашли библиотеку (это объясняется в --help выводе configure и в стандартном INSTALL файле).

Также макросы --with-package и --enable-package не должны использоваться для указания путей, в отличие от того, что делают многие сторонние макросы. Стандарты кодирования GNU прямо запрещают такое использование:

Не используйте параметр --with для указания имени файла, используемого для поиска определенных файлов. Это выходит за рамки того, для чего предназначены параметры --with.

CPPFLAGS и LDFLAGS уже здесь для решения проблемы, так зачем переделывать и поддерживать еще один механизм?

person adl    schedule 02.10.2009