我被奇怪的变量扩展所困。让我解释一下。
我有一个使用configure.ac
,Makefile.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.am
与Makefile
的语法不同。
更新:
我试图添加一些更改以查看该变量是否得到了定义:
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