我在cmd.exe上遇到GNU make问题。不知怎的,它忽略了' /'输出dir
并表示没有规则。
$(foreach f,$(OBJS),$(eval $f : | $(dir $f)))
%/:
mkdir -p $@
所以我做了这个肮脏的黑客。
$(foreach f,$(OBJS),$(eval $f : | $(dir $f)D))
%/D:
mkdir -p $@
有更好的解决方案吗?请不要告诉我把破壳扔掉。我没有使用shell,但其他人使用它。
答案 0 :(得分:0)
据我所知,目标模式匹配与shell无关,最终会用来运行配方目标。它完全由内部完成。
那说准确的makefile片段(使用OBJS := a/a.o b/b.o c/c.o
)适用于我在CentOS 5上使用make 3.81,3.82,4.0和4.1。(我没有在Windows上进行测试。)所以也许这里有一些特定于操作系统的内容。
您可以尝试删除/
并仅使用%
作为目标吗?
所有人都说更好的解决方案可能是将目录组件分配给变量并将该变量用作目标。
DIRS :=
$(foreach f,$(OBJS),$(eval $f : | $(dir $f)) $(eval DIRS += $(dir $f)))
$(DIRS):
mkdir -p $@