【问题标题】:GNU Make "gsrc/%.v: %.rdl" file generationGNU Make "gsrc/%.v: %.rdl" 文件生成
【发布时间】:2013-07-01 19:16:20
【问题描述】:

您好,我目前正在使用 GNU Make,我的目标之一如图所示。

    gsrc/%.v: %.rdl
          run tool on the .rdl

该工具会生成一个 gsrc/example.v、example.vh 和一个 example.xml 文件(通常在我当前的工作目录中)。 example.v 文件被移动到我假设的目标定义之外的 gsrc 目录中,我正在尝试找出将生成的所有文件移动到 gsrc 目录中的方法。

我猜首先,gsrc/%.v 是否会导致生成的文件被移动到 gsrc 目录,如果是,我怎样才能使用 make 将我的 .vh 和 .xml 放到同一个目录中?

-谢谢

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    Make 不会将任何文件移动到任何地方。如果你写这样的规则:

    gsrc/%.v : %.rdl
            <run some command>
    

    你告诉 make 当它想要构建一个名为 gsrc/example.v 的文件时,它可以执行 &lt;run some command&gt; 并且该命令将创建和/或更新该文件。该配方的内容必须完成所有文件的更新和移动。 Make 不会为你做这件事。

    所以,如果你希望你的输出进入gsrc,但你运行的命令没有把它放在那里,那么你可以在你的配方中添加更多的东西来移动它:

    gsrc/%.v gsrc/%.vh gsrc/%.xml: %.rdl
            <run some command>
            mv $*.vh $*.xml gsrc
    

    【讨论】:

    • 我应该指出,如果你真的对错误处理很挑剔,那么你需要做的事情还有很多,这样如果事情失败了,这条规则就会被正确地清理掉。但这将完成您想要的 99%。
    • 为了完整起见,您能否详细说明这些额外的东西是什么?
    • 如果没有“某些命令”实际作用的详细信息,很难知道,但您可能希望在运行命令之前删除输出,例如 rm -f gsrc/$*.v gsrc/$*.vh gsrc/$*.xml。然后mv 命令可能会失败,只有一些文件被移过来,所以如果它失败了,你会想要全部删除它们(但不要忘记仍然退出并显示错误代码,所以 make 知道它不起作用)。如果“某些命令”失败,您可能需要进行一些清理,但由于我们不知道它是做什么的,因此很难确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    相关资源
    最近更新 更多