makefile foreach 在第一次迭代时停止

makefile foreach stops at the first iteration

我有一个要编译的源文件列表。我 select 他们来自不同的 directories/subdirectories,最后我有一个列表。我想我会使用带有 eval/call/define 的 foreach 循环。命令信息有效并且 make 的第一遍可以看到所有这些信息。

这里是makefile的一段相关代码:

define cmp-one
$(info )
:
        $(CMP) $(CMP_FLGS) $(INCL) -c  -o 
endef

$(foreach src_tmp,$(SRC),$(info $(src_tmp)))
$(foreach src_tmp,$(SRC),$(eval $(call cmp-one,$(src_tmp),$(src_tmp:%.cpp=%.o))))

这是一个非常简单的案例的屏幕输出,可以将我的问题简化为最清晰的示例(注意:make 文件位于一个目录中,因此您会注意到一些 ../):

make --debug -Bf makefile_proj_1


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
Reading makefiles...
../src/proj_1/proj_1_f1.cpp
../src/proj_1/proj_1_f2.cpp
../src/proj_1/proj_1_f3.cpp
../src/main_proj_1.cpp
../src/proj_1/proj_1_f1.o
../src/proj_1/proj_1_f2.o
../src/proj_1/proj_1_f3.o
../src/main_proj_1.o
Updating goal targets....
Must remake target `../src/proj_1/proj_1_f1.o'.
g++-4.9 -std=c++11 -Wall -I../incl/top -I../incl/proj_1 -c ../src/proj_1/proj_1_f1.cpp -o ../src/proj_1/proj_1_f1.o
Successfully remade target file `../src/proj_1/proj_1_f1.o'.

只编译了第一个文件。如果我打乱文件列表的元素,只有第一个完成(当然除了 main,因为其他人没有编译)。包含 $(info) 不会造成任何问题。

我尝试过其他替代方法,或者简单的方法,例如添加;但均未成功。 (绝望)。我还查看了 GNU 手册并看了一天,但没有成功。我遇到了 .SECONDEXPANSION,但也无法使其工作。

有谁知道我在做什么基本错误?非常感谢。

太棒了,伊坦!是的。有用。我把它放在 .PHONY 之后。那个 'all' 目标,确实,我在过去的几个小时里删除了它,想在循环本身上 'concentrate' 。我肯定学到了一个基本的东西,不要再忘记 make 是如何工作的!谢谢。