有没有一种方法可以替代Gnu Make命令的目标?

我正在使用正斜杠分隔path组件使用每个目录的目标在Windows上进行recursion制作。 如果有人跑

> make foo/bar 

它会运行良好。 但是,如果有人跑

 > make foo\bar 

它不会findbuild立的目标:

 make: Nothing to be done for `foo\bar'. 

我会喜欢它,如果我可以添加这样的东西到我的顶级Makefile:

 MAKECMDGOALS = $(subst \,/,$(MAKECMDGOALS)) 

但是这样的事情是行不通的。 MAKECMDGOALS只能被读取。 或者,即使我可以为我所有的常规目标制作反斜杠目标,例如:

 $(DIRS): %: $(subst /,\,%) 

但是这也是行不通的。 最好的方法是什么?

我已经想出了一个相当不错的方式来处理这个,而不是诉诸脚本来包装make:

 # $(call bstarget, foo foo/bar baz frob/niz) # will result in the following targets being defined in place: # foo\bar: foo/bar # brob\niz: from/niz bstarget = $(eval \ $(foreach TARGET, $1, \ $(if $(findstring /, $(TARGET)), \ $(call bstargeteval, $(subst /,\,$(TARGET)), $(TARGET))))) define bstargeteval $1: $2 endef 

然后它可以在我的Makefile中调用$(调用bstarget,$(DIRS))

我想你需要在你的subst表达式中使用4个反斜杠(转义)。