Makefile中的替换

Makefile中的替换,makefile,Makefile,如何将“SOME/path/”替换为“DIRECTORY”? 这在不改变代码结构的情况下是可能的吗 另外,我不能在不检查文件的情况下使用rmdir,因为它会生成错误 更新。我这样做了: ifeq ($(SYSTEM),WINDOWS) # need to change something here : RM = @(if exist "$(subst /,\,$(DIRECTORY))" rmdir /s /q $(subst/,\,$(DIRECTORY)))) else RM := @rm

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

另外,我不能在不检查文件的情况下使用rmdir,因为它会生成错误

更新。我这样做了:

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/
它确实有效。多亏了马克·盖瑞克


有没有一种方法可以通过替换RM变量而不更改干净的目标命令来实现这一点?

使
RM
成为一个函数(有关如何实现的方法,请参阅手册)

那你就会

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)

实际上,我认为处理这种情况的最好方法是为separator引入一个变量,即从两个操作系统访问一个文件系统

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

现在,您可以始终使用
一些$/PATH
,而无需更改任何其他内容-只需将
$
放在
/
前面,您需要使路径也可用于Windows

有什么理由这样做吗?没有特殊原因。但我想知道,这可能吗?是的,我补充了我的答案。是的,你想列出每个干净目标的目录-我真傻,没有意识到这一点。
/ := $(if $(filter WINDOWS, $(SYSTEM)),\,/)