2013-07-03 41 views
0

你好,我目前使用的是GNU Make,我的一个目标如图所示。GNU make“gsrc /%.v:%.rdl”文件生成

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放到同一个目录中?

-Thanks

回答

2

Make永远不会移动任何地方的任何文件。如果你写这样一个规则:

gsrc/%.v : %.rdl 
     <run some command> 
你告诉做,当它想建立一个名为 gsrc/example.v一个文件时,它可以执行 <run some command>,并且命令将创建和/或更新文件

。该配方的内容必须完成所有文件的更新和移动。 Make不会为你做。

所以,如果你希望你的输出进入gsrc但在运行该命令不把它放在那里,那么你可以添加更多的东西到你的食谱来移动它:

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

我要指出如果你对错误处理非常挑剔,那么你需要做更多的事情,这样如果事情失败了,这个规则就可以正确清理。但是这会做99%的你想要的。 – MadScientist

+0

为了完整,您可以扩展这些额外的东西吗? –

+1

如果没有关于“some command”实际做了什么的细节,很难知道,但是也许你会希望在运行命令之前删除输出,比如'rm -f gsrc/$ *。v gsrc/$ *。vh gsrc/$ *。xml'。然后,'mv'命令可能会失败,只有一些文件被移动了,所以如果失败了,你会想要全部删除它们(但是不要忘记仍然用一个错误代码退出,所以知道它不起作用)。如果“某些命令”失败,您可能想要进行一些清理,但由于我们不知道它的作用,所以很难确定。 – MadScientist