0
ifeq ($(SYSTEM),WINDOWS)
# need to change something here :
RM = @(if exist "$(subst /,\,$(DIRECTORY))" rmdir /s /q $(subst/,\,$(DIRECTORY))))
else
RM := @rm -rf
endif

clean_1 :
    $(RM) SOME/PATH/

clean_2 :
    $(RM) SOME/PATH/

如何将替换路径“SOME/PATH/”替换为“DIRECTORY”?在不改变代码结构的情况下这可能吗?

PS 我不能在不检查文件的情况下使用rmdir ,因为它会产生错误。

更新。我这样做了:

ifeq ($(SYSTEM),WINDOWS)
RM = @(if exist "$(subst /,\,$1)" rmdir /s /q $(subst/,\,$1)))
else
RM = @rm -rf $1
endif

clean_% :
    $(call RM, SOME/PATH/)

真的行。感谢马克盖尔克。

有没有办法通过替换RM变量而不更改clean -target 命令来做到这一点?

4

1 回答 1

0

制作RM一个函数(有关如何执行此操作,请参阅手册)。

然后你会有

clean_%:
    $(call RM, SOME/PATH/)

是的,您也可以在不更改目标名称的情况下执行此操作,只需$(RM)在原始规则中替换为函数调用即可。

实际上,我认为处理您似乎遇到的情况(从两个操作系统访问一个文件系统)的最佳方法是引入一个用于分隔符的变量

/ := $(if $(filter WINDOWS, $(SYSTEM)),\,/)

现在,您可以随时使用SOME$/PATH,而无需更改任何其他内容 - 只需放在您需要为 Windows 提供路径$的位置之前/

于 2013-10-20T19:15:07.140 回答