gpt4 book ai didi

linux - Makefile:124: *** 对函数 `foreach' 的调用未终止:缺少 `)' 。停止

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:20 31 4
gpt4 key购买 nike

我正在创建 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

荷曼树

编辑:重制版本:使用“remake all -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”,但错误仍然显示相同

最佳答案

你说“它按预期调用了 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,并且它有语法错误,则即使拼写错误在其他地方,也会在该行上报告为错误。

您不能总是相信行号。

关于linux - Makefile:124: *** 对函数 `foreach' 的调用未终止:缺少 `)' 。停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572423/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com