【发布时间】:2019-03-21 15:05:36
【问题描述】:
我被一个奇怪的变量扩展卡住了。让我解释一下。
我有一个使用 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}/ 的新目录,我在其中从license/x86_64 中找到了丢失的.deps。
我很确定这是一个不正确的扩展问题;我尝试了很多方法,但都失败了。
任何人都可以向我解释这样做的正确方法吗?在网上阅读我发现Makefile.am 的语法与Makefile 不同。
更新:
我尝试添加一些更改以查看变量是否正确定义:
AC_DEFINE([ARCH], ["$ARCH"], [arch check])
echo ARCH = "$ARCH" printf x86_64
所以configure.ac中定义的变量,但是Makefile.am中的扩展又不正确了。
【问题讨论】:
-
@Mike 你删除了你的答案吗?
-
是的。如果它不起作用,我认为您需要minimal reproducible example。如果有帮助,我可以取消删除它。
-
嗯,实际上我修改了我的代码并使用了你的代码,因为它当然比我的要好。无论如何,我会听从你的建议,希望我能解决:)
标签: makefile automake variable-expansion brace-expansion