Как правильно создать автоконф настройки netcdf 4.x?

Я не уверен точно, в чем заключается мой вопрос, так как меня серьезно оборачивают autoconf / automake / libtoolize и т. Д. Некоторые из нас пытаются автоматически перенастроить mbsystem. Я бросил репозиторий работы на сегодняшний день здесь:

https://bitbucket.org/schwehr/mbsystem

Я пытаюсь улучшить настройку netcdf для использования nc-config, но я не уверен, как это сделать правильно. Я работаю над configure.in. Кажется, не удается найти заголовок с AC_CHECK_HEADER("netcdfcpp.h") после INCLUDES="$INCLUDES ``$nc_config --cflags``" (простите за неправильные обратные галочки), как взято из проверки gdl netcdf. Как правильно обновить путь из nc-config --cflags?

http://gnudatalanguage.cvs.sourceforge.net/viewvc/gnudatalanguage/gdl/configure.in?revision=1.121

Затем я попытался использовать AX_PATH_GENERIC и застрял на этой ошибке с m4_include([m4/ax_path_generic.m4])

Running autoconf ...
configure.in:29: error: possibly undefined macro: AC_SUBST
      If this token and others are legitimate, please use m4_pattern_allow.
     See the Autoconf documentation.
configure:12992: error: possibly undefined macro: AC_MSG_RESULT

Любая помощь в улучшении создания проверки netcdf, которая на самом деле будет работать с нестандартными нестандартными местами установки через nc-config и выяснение того, как правильно поместить макрос в каталог m4, будет огромной помощью.

Очень поможет указатель на пакет, который делает это действительно чисто. Я искал в источниках netcdf, gdal, geos и gdl примеры. И такие вещи, как проверка осьминога netcdf, не используют nc-config... http://www.tddft.org/trac/octopus/browser/trunk/m4/netcdf.m4

Текущая настройка с fink для netcdf 4.x:

nc-config --cflags --libs
-I/sw/opt/netcdf7/include -I/sw/include
-L/sw/opt/netcdf7/lib -lnetcdf

Спасибо!

2 ответа

См. Makefile.am: Как использовать curl-config и xml2-config в configure.ac? и заменить xml2/curl на netcdf.

Просто используйте

PKG_CHECK_MODULES([libnetcdf], [netcdf])

в configure.acа затем, в Makefile.am:

AM_CPPFLAGS = ${libnetcdf_CFLAGS}
bin_PROGRAMS = foo
foo_SOURCES = ...
foo_LDADD = ${libnetcdf_LIBS}

"Правильный" способ использования стороннего макроса m4 - использовать aclocal (обычно через automake) для генерации aclocal.m4. Если вы используете automake, просто добавьте

ACLOCAL_AMFLAGS = -I m4

сделать Makefile.am и положить

AC_CONFIG_MACRO_DIR([m4])

в configure.ac (после переименования в configure.in).

Если вы не используете automake, добавьте '-I m4' при вызове aclocal. Если вы не используете aclocal, вам придется добавить определение макроса в конец aclocal.m4 (и будьте осторожны, чтобы никогда не запускать aclocal, так как это перезапишет файл.)

Не существует хорошего примера чистого способа использования сценариев conf для построения, потому что использование таких сценариев является изначально ошибочным подходом. Немного более чистый подход состоит в том, чтобы прекратить использование пользовательских сценариев и использовать pkg-config через PKG_CHECK_MODULES, но самый чистый способ сделать это - обучить своих пользователей. Если пользователь хочет установить библиотеку в нестандартных нестандартных местах, он должен быть достаточно образован, чтобы правильно настроить LDFLAGS и CPPFLAGS.

Другие вопросы по тегам