1

一堆项目 foo-AB、foo-BC、foo-AC 等,每个都依赖于 foo-A、foo-B、foo-C 等。

每个 foo-X 都会安装一个 pkg-config 文件(foo-X.pc.in),其中包含一个变量srcdir=@datarootdir@/foo/foo-B. 一个 foo-XY 项目需要引用 Xsrcdir 和 Ysrcdir 中的文件。

目前我们在configure.ac中这样做:

PKG_CHECK_MODULES([foo_X], [foo-X])
AC_ARG_VAR(XSRC, "Source directory for foo-X")
AS_IF([test -z "$XSRC"], [XSRC=`pkg-config --variable=srcdir foo-X`])

(所以 Makefile.am 有类似的规则compile "$XSRC"/file.bar $@)。这还允许开发人员在运行 ./configure 时覆盖 XSRC。

我的问题:是否有更规范的方式在 autotools 配置/makefile 中使用非标准 pkg-config 变量?例如 libdir,我看到 pkg-config 设置变量本身,因此除了 PKG_CHECK_MODULES 之外不需要 configure.ac 行;我们应该使用其他 m4 宏吗?

4

1 回答 1

1

我知道这已经很晚了,但是由于最近有人问我这个问题,我认为也值得回答这个问题。

您正在寻找的是PKG_CHECK_VAR,实际上大部分代码都可以用一行替换:

PKG_CHECK_VAR([XSRC], [foo-X], [srcdir], ,
  AC_MSG_FAILURE([Unable to find value for XSRC]))

错误消息比由 触发的错误消息不太清楚PKG_CHECK_MODULES,但它也会在srcdir未定义变量的情况下触发。

作为我的 Autotools Mythbuster 的一部分,我写了更多细节。

于 2016-01-02T17:37:29.467 回答