我想在configure.ac中给定一个现有的Makefile(下面)设置include和lib路径。但我不知道如何在configure.ac中使用$(shell XYZ-config --libs)命令。
有人可以帮忙吗?谢谢!
# --------------------------------------------------------------------------
# Acquire configuration information for libraries that libs3 depends upon
ifndef CURL_LIBS
CURL_LIBS := $(shell curl-config --libs)
endif
ifndef CURL_CFLAGS
CURL_CFLAGS := $(shell curl-config --cflags)
endif
ifndef LIBXML2_LIBS
LIBXML2_LIBS := $(shell xml2-config --libs)
endif
ifndef LIBXML2_CFLAGS
LIBXML2_CFLAGS := $(shell xml2-config --cflags)
endif
答案 0 :(得分:5)
我保证实际使用pkgconfig而不是笨拙的* -config脚本,这使得每个包装成一行:
# configure.ac
PKG_CHECK_MODULES([libcurl], [curl])
PKG_CHECK_MODULES([libxml2], [libxml-2.0])
# Makefile.am
AM_CPPFLAGS = ${libcurl_CFLAGS} ${libxml2_CFLAGS}
bin_PROGRAMS = foo
foo_LDADD = ${libcurl_LIBS} ${libxml2_LIBS}
* - 配置脚本倾向于成为大量冗余代码(例如syvVinit脚本与systemd单元文件),具有偏离行为:某些-config脚本使用--ccflags
,其他{{1 }}。有些人使用--cflags
,有些人使用--libs
- 最好避免使用可怕的混乱。
答案 1 :(得分:0)
为了他人的利益,把我在jxrgensen提供的答案帮助下使用的实际内容放在上面。希望它能帮助某人:)
在configure.ac中:
# Get xml2 library and include locations
AC_ARG_WITH([xml2-include-path],
[AS_HELP_STRING([--with-xml2-include-path],
[location of the xml2 headers, defaults to /usr/include/xml2])],
[xml2_CFLAGS="-I$withval"],
[xml2_CFLAGS='-I/usr/include'])
AC_SUBST([xml2_CFLAGS])
AC_ARG_WITH([xml2-lib-path],
[AS_HELP_STRING([--with-xml2-lib-path], [location of the xml2 libraries])],
[xml2_LIBS="-L$withval -lxml2"],
[xml2_LIBS="-L/usr/lib -lxml2"])
AC_SUBST([xml2_LIBS])
# Get curl library and include locations
AC_ARG_WITH([curl-include-path],
[AS_HELP_STRING([--with-curl-include-path],
[location of the curl headers, defaults to /usr/include/curl])],
[curl_CFLAGS="-I$withval"],
[curl_CFLAGS='-I/Users/vshakya/durham_doll/curl/curl-7.23.1/BUILD/include'])
AC_SUBST([curl_CFLAGS])
AC_ARG_WITH([curl-lib-path],
[AS_HELP_STRING([--with-curl-lib-path], [location of the curl libraries])],
[curl_LIBS="-L$withval -lcurl"],
[curl_LIBS="-L/Users/vshakya/durham_doll/curl/curl-7.23.1/BUILD/lib -lcurl"])
AC_SUBST([curl_LIBS])
Makefile.am,与上面提到的j0rgensen类似。
答案 2 :(得分:-1)
软件包维护者是做这项工作的错误人选。 pkg-config是一个合理的工具,但它在autotools中没有位置。应该禁止PKG_CHECK_MODULES。
从软件包维护者的角度来看,用户(调用configure脚本的人员或进程)有责任正确设置LDFLAGS和CPPFLAGS,以通知configure脚本系统的设置方式。如果用户希望简化生活,他们将设置系统,以便编译器可以找到库和头文件而无需分配LDFLAGS或CPPFLAGS(例如,库将位于/ usr / lib,/ usr /中的头文件中包括)。如果用户希望让生活变得困难,那就是用户的选择,并且软件包维护者不应该担心修复用户的错误决定。如果用户选择在非标准位置安装库并希望使用pkg-config在面对错误决策时稍微简化其生活,他们可以在config.site文件中使用pkg-config进行相应的分配到LDFLAGS和CPPFLAGS。 pkg-config是config.site中的一个合理工具,但它在configure.ac中绝对没有位置。这是用户的问题,而不是包维护者的问题。
最重要的是,选择在非标准位置安装库的用户不应期望软件包维护者为他们解决问题。