Autoconf中PKG_CONFIG_PATH在configure.ac的PKG_CHECK_EXISTS中失效求助
问题
我希望在自定义PKG_CONFIG_PATH路径下检查gmodule是否存在,编写的configure.ac代码如下:
// configure.ac AC_SUBST([PKG_CONFIG_PATH],"./glib/lib/x86_64-linux-gnu/pkgconfig/") PKG_PROG_PKG_CONFIG PKG_CHECK_EXISTS([gmodule-2.0],[],[ AC_MSG_ERROR(can't find gmodule in glib-2.0) ])
但运行configure时出现如下错误:
checking for libunwind.h... yes checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes configure: error: can't find gmodule in glib-2.0
我可以100%确认gmodule-2.0.pc在自定义路径中:
> ls ./glib/lib/x86_64-linux-gnu/pkgconfig/ gio-2.0.pc gio-unix-2.0.pc glib-2.0.pc gmodule-2.0.pc gmodule-export-2.0.pc gmodule-no-export-2.0.pc gobject-2.0.pc gthread-2.0.pc
且手动设置PKG_CONFIG_PATH后,pkg-config可以正常找到gmodule-2.0:
> PKG_CONFIG_PATH="./glib/lib/x86_64-linux-gnu/pkgconfig/" pkg-config gmodule-2.0 --cflags -pthread -I/home/xxx/fuzz/test/StochFuzz/glib/include -I/home/xxx/fuzz/test/StochFuzz/glib/include/glib-2.0 -I/home/xxx/fuzz/test/StochFuzz/glib/lib/x86_64-linux-gnu/glib-2.0/include
请问我遗漏了什么?
解决方法
AC_SUBST的作用是将变量传递给后续生成的Makefile,不会修改configure脚本运行时的环境变量。你当前的代码里,先调用AC_SUBST设置PKG_CONFIG_PATH,但此时这个变量并没有被加入到configure的运行环境中,所以后续的PKG_PROG_PKG_CONFIG和PKG_CHECK_EXISTS执行时,pkg-config还是使用系统默认的PKG_CONFIG_PATH,找不到自定义路径下的.pc文件。
你需要在调用pkg-config相关宏之前,先把自定义路径添加到PKG_CONFIG_PATH环境变量中,以下是两种可行的写法:
- 方式一:直接修改并导出环境变量
在configure.ac开头添加如下代码,优先使用自定义路径,同时保留原有路径:
export PKG_CONFIG_PATH="./glib/lib/x86_64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH"
- 方式二:保存原有路径后再设置
如果需要更清晰地管理原有路径,可以这样写:
# 保存原有的PKG_CONFIG_PATH PKG_CONFIG_PATH_ORIG="$PKG_CONFIG_PATH" # 组合新的PKG_CONFIG_PATH,自定义路径在前 PKG_CONFIG_PATH="./glib/lib/x86_64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH_ORIG" export PKG_CONFIG_PATH
修改完成后,重新运行autoreconf -i生成新的configure脚本,再执行./configure就能正常找到gmodule-2.0了。
内容的提问来源于stack exchange,提问作者syheliel
相关产品推荐
相关产品推荐

