【问题标题】:File delete using FOR loop in makefile在 makefile 中使用 FOR 循环删除文件
【发布时间】:2013-10-15 13:46:20
【问题描述】:

我在编写 FOR 循环以删除干净目标中的目标文件时感到震惊。我尝试了下面的代码,但是我收到了错误消息。有人可以帮我解决这个问题吗?

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:/Technique/Testmake/1.obj DEL /F "D:\Technique\Testmake\1.obj" 如果存在 D:/Technique/Testmake/2.obj DEL /F "D :\Technique\Testmake\2.obj" 无效开关 - "Technique"。 gmake: * [clean] 错误 1

谢谢, 阿南德

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

【问题讨论】:

    标签: build makefile gnu-make


    【解决方案1】:

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

    $(foreach A,W X Y Z,$(A) $(A))
    

    产生单个字符串W W X X Y Y Z Z。在您的情况下,它会产生一个字符串,其中包含所有 if 语句的串联。这当然行不通。

    如果你提到为什么你觉得你首先需要foreach,它会更容易提供帮助。如果是我,我会写:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      相关资源
      最近更新 更多