Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile.am中变量的错误扩展_Makefile_Automake_Variable Expansion_Brace Expansion - Fatal编程技术网

Makefile.am中变量的错误扩展

Makefile.am中变量的错误扩展,makefile,automake,variable-expansion,brace-expansion,Makefile,Automake,Variable Expansion,Brace Expansion,我被一个奇怪的变量展开所困扰。让我解释一下 我有一个使用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-ve

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

我有一个使用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\u 64
中找到了缺少的
.deps

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

有人能给我解释一下正确的方法吗?在网上阅读,我发现
Makefile.am
的语法与
Makefile
不同

更新:

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

AC_定义([ARCH]、“$ARCH”]、[ARCH检查])

echo ARCH=“$ARCH”
printf
x86\u 64

因此,中的变量在configure.ac中定义,但在Makefile.am中的扩展不正确。

configure.ac
中,使用宏 要在每个生成的makefile中创建make变量
varname
,将 具有生成makefile时计算的
value
值。
可以是外壳扩展。例如

AC_SUBST(ARCH,[`./arch.sh`])
configure.ac
中,将在每个makefile中创建分配:

ARCH = x86_64
假设
x86_64
/arch.sh
/configure
时间的标准输出 在构建目录中。然后,您可以假设此变量是这样分配的 在您的
Makefile.am
中,编写以下内容:

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

我完全按照你的建议做了,但我得到了同样的结果:(@Kyrol之后你重新生成生成系统了吗?-
make distclean;autoeconf;/configure;make
。是的。我有一个脚本
/build.sh
,可以这样做:
autoeconf--force--install
automake--add missing
autoconf
。即使我放了
make distclean
,结果也是一样的。@Kyrol在这种情况下,我认为真正的问题在你的帖子中并不明显。最好提供一个。
autoeconf
已经调用了
automake
autoconf
(这就是
autoeconf
的目的),所以你的
build.sh
只需调用
autoreconf
@Mike你删除了你的答案吗?是的。如果它不起作用,我想你需要一个。如果有帮助,我可以取消删除它。嗯,实际上我修改了我的代码并使用了你的,因为你的代码当然比我的好。无论如何,我会听从你的建议,希望我能解决:)