【问题标题】:GNU make ignores slash on cmd.exeGNU make 忽略 cmd.exe 上的斜线
【发布时间】:2016-02-01 20:40:40
【问题描述】:

我在 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,但其他人使用它。

【问题讨论】:

    标签: windows cmd makefile gnu-make


    【解决方案1】:

    据我所知,目标模式匹配与 shell make 最终将用于运行配方目标没有任何关系。它完全是在内部完成的。

    也就是说,确切的 makefile sn-p(使用 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 $@
    

    【讨论】:

    • 是的,它可以在没有/ 的情况下工作,但我更喜欢你的 DIRS 技巧。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多