makefile.am中变量的错误扩展



我被奇怪的变量扩展所困。让我解释一下。

我有一个使用configure.acMakefile.am组成的Automake的项目。基本上,在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目录,我注意到创建了一个新的DIR,称为${ARCH}/,我从license/x86_64中找到缺少的.deps

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

有人可以向我解释正确的方法吗?在网上阅读我发现Makefile.amMakefile的语法不同。

更新:

我试图添加一些更改以查看该变量是否得到了定义:

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

echo ARCH = "$ARCH" printf x86_64因此,在configure.ac中定义的变量,但是扩展在makefile.am中不正确。

在您的configure.ac中,使用宏AC_SUBST(varname,[value])在每个生成的makefiles中创建一个可变量的 varname具有在生成makefile时评估value的值。 value可能是壳膨胀。所以例如

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

configure.ac中,每个makefile都会创建分配:

ARCH = x86_64

假设x86_64./configure -time的./arch.sh的标准输出在构建目录中。然后,您可以假设此变量已分配在您的Makefile.am中,写下以下内容:

noinst_HEADERS = license/${ARCH}/lchecker.h

最新更新