Autoconf:使用`PKG_CHECK_EXISTS`时,`PKG_CONFIG_PATH`在`configure.ac`中不起作用

oknwwptz  于 2022-10-04  发布在  Linux
关注(0)|答案(1)|浏览(255)

我想检查我的自定义PKG_CONFIG_PATH中是否存在gmodule

// 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)
])

但我有以下错误:

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

我百分之百确定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查找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

我错过了什么吗?

gc0ot86w

gc0ot86w1#

我错过了什么吗?

看起来你在期待这个..。

AC_SUBST([PKG_CONFIG_PATH],"./glib/lib/x86_64-linux-gnu/pkgconfig/")

..。使configure在运行pkg-config时将./glib/lib/x86_64-linux-gnu/pkgconfig/用作PKG_CONFIG_PATH。在这种情况下,你至少错过了

  • AC_SUBST()的目的是创建一个输出变量。如果您想要将pkg-config路径传递给您的Makefile,那么您需要一个输出变量,但这与您的configure脚本没有直接关系。

1.尽管AC_SUBST确实设置了指定外壳变量的值(如果您为其指定值),

1.它不一定要导出该变量。
1.赋值不一定出现在configure脚本中与configure.ac中宏的位置对应的位置。
1.如果您正在尝试使用与您的项目捆绑在一起的组件(如果您自己的源代码树中的pkg-config数据提供了所需的详细信息,那么您肯定就是这样做的),那么pkg-config就太过分了。只需在Makefile.am文件中放置所需的路径和标志,或者如果您没有使用Automake,则直接在Makefile.in文件中放置所需的路径和标志。

如果您坚持使用pkg-config执行此操作,则此变体可能会导致您希望从PKG_CHECK_EXISTS宏中执行的行为:


# configure.ac

PKG_CONFIG_PATH=./glib/lib/x86_64-linux-gnu/pkgconfig/
export PKG_CONFIG_PATH
PKG_PROG_PKG_CONFIG
PKG_CHECK_EXISTS([gmodule-2.0],[],[
    AC_MSG_ERROR(can't find gmodule in glib-2.0)
])

如果您还需要将您的定制PKG_CONFIG_PATH传送到您的Make文件,那么您可以添加...

AC_SUBST([PKG_CONFIG_PATH])

……但你不应该**。尽管在这种情况下根本不应该使用pkg-config(见上文),但是当您在AutoTools构建系统中使用pkg-config时,使用它的最佳方式完全是在configure中。在那里提取所需的路径和标志,并通过输出变量将它们传递到您的生成文件。

相关问题