2014-08-29 188 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