Makefile中的替换
如何将“SOME/path/”替换为“DIRECTORY”? 这在不改变代码结构的情况下是可能的吗 另外,我不能在不检查文件的情况下使用rmdir,因为它会生成错误 更新。我这样做了: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
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)),\,/)