Добавление пути к AC_CHECK_LIB

У меня следующая проблема с configure.ac:

Я хотел бы добавить путь поиска библиотек, потому что библиотеки, которые мне нужно использовать, находятся в каких-то сумасшедших папках. Моя идея состоит в том, чтобы сделать это с опцией:

AC_ARG_WITH([cplex-lib-path],
  [AS_HELP_STRING([--with-cplex-libs], [location of the CPLEX library])],
  [CPLEX_LIBS="-L$withval --lcplex"],
  [])

Если кто-то укажет путь к библиотеке, я, конечно, хотел бы посмотреть, можно ли найти библиотеку:

AC_CHECK_LIB([cplex], [CPXcreateprob], [],
[
  AC_MSG_ERROR([Could  not find CPLEX library])
])

Однако я хотел бы добавить CPLEX_LIBS в путь поиска библиотеки AC_CHECK_LIB. Это как-то возможно?


person hfhc2    schedule 17.04.2012    source источник


Ответы (1)


Ответственность за указание скрипту конфигурации, где находятся библиотеки, лежит на пользователе. Пользователю доступно множество вариантов, наиболее распространенными из которых являются:

configure LDFLAGS=-L/p/a/t/h

У сопровождающего нет абсолютно никаких причин изменять сценарии сборки, чтобы удовлетворить пользователя в этом вопросе, и есть много веских причин, чтобы не пытаться что-либо сделать. Если вы (как пользователь) обнаружите, что ваши библиотеки находятся во многих местах, вы можете установить LDFLAGS в своей среде или на config.site. В вашей цепочке инструментов, вероятно, есть другие механизмы (например, если вы используете gcc, вы можете просто установить LIBRARY_PATH). Инфраструктура, предоставляемая autoconf, уже предоставляет множество механизмов для решения этой проблемы, и мейнтейнеру пакетов лучше не изобретать велосипед и не предоставлять нестандартные интерфейсы.

Теперь, когда я утверждал, что вам не следует делать то, что вы пытаетесь сделать, я расскажу вам, как это сделать. AC_CHECK_LIB будет использовать значение в LDFLAGS для поиска, так что вы можете сделать:

LDFLAGS="$LDFLAGS $CPLEX_LIBS"     # this is a bug

и это неправильно, потому что теперь у вас есть флаг -l в LDFLAGS, но -l аргументы принадлежат LIBS. Кроме того, если вы собираетесь иметь другую библиотеку, libfoo и $FOO_LIBS, указывающую на другое место, просто нет способа устранить неоднозначность: LDFLAGS получит -L/cplex и -L/foo, и пользователь не будет знать, какой из них идет первым и не сможет гарантировать связь одной библиотеки с другой. Короче говоря, не используйте CPLEX_LIBS: научите своего пользователя использовать LDFLAGS. Кроме того, удобнее набирать:

configure LDFLAGS='-Lpath1 -Lpath2' 

чем печатать

configure --with-cplex=path1 --with-foo=path2

а последний запутывает вещи и ведет к необразованному населению. Я никогда не понимал, почему людям нравится добавлять эти --with-lib=/p/a/t/h опции в свои сборки: они не дают ничего полезного.

person William Pursell    schedule 18.04.2012