Makefile中的替换

时间:2013-10-20 17:37:39

标签: makefile

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”? 这是否可以在不改变代码结构的情况下实现?

P.S。我不能在不检查文件的情况下使用 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/)

它确实有效。感谢Mark Galeck。

有没有办法通过替换 RM 变量来实现这一点,而无需更改 clean -target命令?

1 个答案:

答案 0 :(得分:0)

使RM成为一个函数(请参阅手册以了解如何操作)。

然后你会有

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

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

实际上,我认为处理你似乎拥有的情况的最佳方法是从两个操作系统访问一个文件系统,那就是为分隔符引入一个变量

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

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