我陷入了奇怪的变量扩展。让我解释一下。
我有一个使用自动制作的项目,该项目由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}/
的新目录,在该目录中,我从.deps
中找到了丢失的license/x86_64
。
我很确定这是一个错误的扩展问题;我已经尝试了很多方法,但是失败了。
有人可以向我解释正确的方法吗?在网上阅读后,我发现Makefile.am
与Makefile
的语法不同。
更新:
我尝试添加一些更改以查看是否正确定义了变量:
AC_DEFINE([ARCH], ["$ARCH"], [arch check])
echo ARCH = "$ARCH"
printf x86_64
因此在configure.ac中定义了变量,但在Makefile.am中扩展名又不正确。
答案 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