2014-08-29 42 views
0

我创建的Makefile,它给了我下面的错误Makefile:124:***未终止调用函数`foreach':缺少')'。停止

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

Makefile的左右线124

.PHONY: popiso 
popiso: isolinux_cfg $(foreach x,$(_$(country)_pops_roles), pop_iso_$(x)) $(isomedia) 
@echo [email protected] 
@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 

$(_ $(国家)_pops_roles)得到正确的扩大,它调用pop_iso_XXXX 4它假定的时间。 然后它给出了上述错误。我正在使用RHEL6 - 64位机 我对Makefile/

$ 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> 

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

+0

您确定这是导致该错误消息的行吗? – 2014-08-29 16:37:30

+0

使用[remake](http://bashdb.sourceforge.net/remake/)及其'-x'标志来调试此类错误。 – 2014-08-29 16:40:08

+0

对于第124行,即foreach命令后面的行,说明错误消息。在线foreach是第123个。我会检查重拍。 – Hemanshu 2014-08-29 16:57:51

回答

0

你说“它调用pop_iso_XXXX 4次,因为它假设”。

这证明问题不在此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,并且它有一个语法错误,那么即使这个错字是其他地方,这个错误也会被报告为这条错误。

你不能总是信任行号。

+0

谢谢你的回答。 $(isomedia)只是创建目标目录,如果它不存在。我已经完全调试了脚本,它没有报告任何错误,这是一个问题。没有任何错误,我没有任何东西,但行号去。 – Hemanshu 2014-09-02 12:30:16

+0

pop_iso_foo/bar也是假的,它们被定义为定义为popiso_pop_role .PHONY:pop_iso _ $(1)_ $(2) pop_iso _ $(1)_ $(2):isolinux.cfg.head rpms.m4 ks_network .cfg.m4 @echo Hemanshu – Hemanshu 2014-09-02 12:38:43