1

我被一个奇怪的变量扩展困住了。让我解释。

我有一个使用 automake 的项目,由 ,configure.ac组成Makefile.am。基本上,在Makefile.am我正在做的事情中:

ARCH = $(shell ${CURDIR}/./arch.sh)
...
noinst_HEADERS = license/${ARCH}/lchecker.h
proj_SOURCES = main.c license/${ARCH}/lchecker.c
proj_LDFLAGS = -avoid-version -Llicense/${ARCH}

./arch 只是uname -m为了确定所需的架构,因为我必须输入正确的目录。

当我运行构建时,我有这个错误:

Makefile:622: license/x86_64/.deps/lchecker.Po: No such file or directory
make[1]: *** No rule to make target 'license/x86_64/.deps/lchecker.Po'.  Stop.

如果我进入该license目录,我会注意到创建了一个新目录,名为${ARCH}/where I find the missing .depsfrom license/x86_64

我很确定这是一个不正确的扩展问题;我尝试了很多方法,但我失败了。

谁能向我解释这样做的正确方法?在网上阅读,我发现它Makefile.am的语法与Makefile.

更新:

我尝试添加一些更改以查看变量是否正确定义:

AC_DEFINE([ARCH], ["$ARCH"], [arch check])

echo ARCH = "$ARCH"printfx86_64 所以在configure.ac 中定义的变量,但在Makefile.am 中扩展又不正确。

4

1 回答 1

2

在您的configure.ac中,使用宏在每个生成的生成文件中AC_SUBST(varname,[value]) 创建一个生成变量,该变量varname将具有生成生成文件value时评估的值。 value可能是外壳扩展。所以例如

AC_SUBST(ARCH,[`./arch.sh`])

inconfigure.ac将在每个 makefile 中创建分配:

ARCH = x86_64

假设这是构建目录中at -timex86_64的标准输出。然后你可以假设这个变量是这样分配在你的并写下类似的:./arch.sh./configureMakefile.am

noinst_HEADERS = license/${ARCH}/lchecker.h
于 2019-03-21T16:24:15.867 回答