Build 使用makefile中的FOR循环删除文件

Build 使用makefile中的FOR循环删除文件,build,makefile,gnu-make,Build,Makefile,Gnu Make,我在写循环删除干净目标中的对象文件时被打动了。我尝试了下面的代码,但收到了错误消息。谁能帮我一下吗 TES_FILE := D:/Technique/Testmake/1.obj TES_FILE += D:/Technique/Testmake/2.obj clean: $(foreach objFile,$(TES_FILE),if exist $(objFile) DEL /F "$(subst /,\,$(objFile))") 错误消息: 错误消息:如果存在D:/technolog

我在写循环删除干净目标中的对象文件时被打动了。我尝试了下面的代码,但收到了错误消息。谁能帮我一下吗

TES_FILE := D:/Technique/Testmake/1.obj
TES_FILE += D:/Technique/Testmake/2.obj

clean:
$(foreach objFile,$(TES_FILE),if exist $(objFile) DEL /F "$(subst /,\,$(objFile))")
错误消息:

错误消息:如果存在D:/technology/Testmake/1.obj DEL/F“D:\technology\Testmake\1.obj”如果存在D:/technology/Testmake/2.obj DEL/F“D:\technology\Testmake\2.obj”无效开关-“technology”。gmake:[clean]错误1

谢谢, 阿南德


我正在重新发布这个问题,因为我没有收到任何答案。

Make的
foreach
函数是一个文本替换。它实际上不会为
foreach
的每个“主体”调用不同的shell或命令。因此make的foreach
的结果就是将所有这些实体实例附加在一起的结果。例如:

$(foreach A,W X Y Z,$(A) $(A))
生成单个字符串
W W X Y Y Z Z
。在您的例子中,它生成一个字符串,其中包含所有
if
语句的串联。这当然行不通

如果您首先提到为什么您觉得需要一个
foreach
,那么会更容易得到帮助。如果是我,我会写:

clean:
       DEL /F $(subst /,\,$(TES_FILE))