Ответственность за указание скрипту конфигурации, где находятся библиотеки, лежит на пользователе. Пользователю доступно множество вариантов, наиболее распространенными из которых являются:
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