Makefile.am中变量的错误扩展

时间:2019-03-21 15:05:37

标签: makefile automake variable-expansion brace-expansion

我陷入了奇怪的变量扩展。让我解释一下。

我有一个使用自动制作的项目,该项目由configure.acMakefile.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}/的新目录,在该目录中,我从.deps中找到了丢失的license/x86_64

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

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

更新:

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

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

echo ARCH = "$ARCH" printf x86_64 因此在configure.ac中定义了变量,但在Makefile.am中扩展名又不正确。

1 个答案:

答案 0 :(得分:2)

在您的configure.ac中,使用宏AC_SUBST(varname,[value]) 在每个生成的makefile中创建一个变量varname, 在生成makefile时具有value被评估为的值。 value可能是shell扩展。例如

AC_SUBST(ARCH,[`./arch.sh`])
configure.ac中的

将在每个生成文件中创建分配:

ARCH = x86_64

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

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