我正在创建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;但错误仍然是相同的
答案 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,并且它有一个语法错误,即使输入错误在其他地方,也会在此行上报告为错误。
您无法始终信任行号。