Makefile:124:***未命令调用函数`foreach':缺少`)'。停止

时间:2014-08-29 16:31:19

标签: linux makefile gnu-make

我正在创建Makefile,它给了我以下错误

    Makefile:124: *** unterminated call to function `foreach': missing `)'. Stop.

第124行的Makefile是

    .PHONY: popiso
popiso: isolinux_cfg $(foreach x,$(_$(country)_pops_roles), pop_iso_$(x)) $(isomedia)
@echo $@
@echo
@echo allhostname $(allhostname)
@echo
@echo
@echo allnetwork_setup $(allnetwork_setup)
@sudo cp $(addsuffix .ks.cfg,$(allhostname)) $(isomedia)
@sudo cp isolinux.cfg $(isomedia)/isolinux/
@echo ready to make iso

$(_ $(country)_pops_roles)得到正确扩展,它会调用pop_iso_XXXX 4次。 然后它给出了上面提到的错误。

我使用RHEL6 - 64位机器 我对Makefile / Gmake没那么深入,所以我不确定这个问题是什么。

$ make -v

GNU Make 3.81

Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-redhat-linux-gnu

Hemanshu

修改:重新制作版本:使用'重制所有-X'

运行

这是主线扩展的方式

popiso: isolinux_cfg pop_iso_loc2_role1 pop_iso_loc2_role2 pop_iso_loc1_role1 pop_iso_loc1_role2 /raw/ops-xxxx/media

成功制作前5个目标,然后按以下步骤停止

end pop_iso_loc1_role2
/raw/patel/xxxx-build-test/build-tools/ks/Makefile:166   Successfully remade target file `pop_iso_loc1_role2'.
<- (/raw/patel/xxxx-build-test/build-tools/ks/Makefile:166)
pop_iso_loc1_role2
remake<19>
-> (/raw/patel/xxxx-build-test/build-tools/ks/Makefile:119)
/raw/ops-xxxx/media:

remake<20>
/raw/patel/xxxx-build-test/build-tools/ks/Makefile:124     Must remake target `popiso'.
Makefile:125: *** unterminated call to function `foreach': missing `)'.  Stop.

***Entering debugger because we encountered a fatal error.
** Exiting the debugger will exit make with exit code 2.
popiso
remake<21>

然后出于测试目的,我删除了第六个目标&#39; / raw / ops-xxxx / media&#39;但错误仍然是相同的

1 个答案:

答案 0 :(得分:0)

你说&#34;它调用pop_iso_XXXX 4次,因为它假设为&#34;。

这证明问题不在这个foreach()中。如果是的话,我希望foreach根本不会扩展。

以下简介,独立的Makefile,可以正常工作并提供预期的结果而不会出错:

_a_pops_roles=foo bar

country=a

popiso: $(foreach x, $(_$(country)_pops_roles), pop_iso_$(x))

pop_iso_foo:
    echo 1

pop_iso_bar:
    echo 2

此用法与您拥有的相同。

在Makefile中查找其他foreach循环,实际上是问题所在。

例如:您在$(isomedia)的同一行上有另一个电话。如果这个宏扩展为foreach,并且它有一个语法错误,即使输入错误在其他地方,也会在此行上报告为错误。

您无法始终信任行号。