Makefile:如何找出依赖关系不再用于其他规则

时间:2011-08-24 22:56:27

标签: makefile

我有一个有点复杂的Makefile,它运行perl脚本和其他工具,并生成大约1000个文件。我希望在生成所有文件后编辑/修改其中一些生成的文件。所以我认为我可以简单地添加一个新规则来这样做:

(phony new rule): $LIST_OF_FILES_TO_EDIT
    file_modifier ...

但是,这里的重点是我想编辑的一些生成文件($LIST_OF_FILES_TO_EDIT)在同一个make进程中用于生成一长串文件。因此,我必须等待确保在make过程中不再需要这些文件,然后才能继续编辑它们。但我不知道该怎么做。更不用说在$LIST_OF_FILES_TO_EDIT的帮助下很难找到生成的文件了。

如果可以在Makefile中提到该规则应该仅作为最后一条规则运行,那么我的问题就会得到解决。但据我所知,这是不可能的。所以任何人都有自己的想法?

有些观点:

  • 要编辑的文件列表($ LIST_OF_FILES_TO_EDIT)是动态确定的(在制作过程之前未知)

  • 我不确定我是否为这个问题选了一个好头衔。 :)

1 个答案:

答案 0 :(得分:1)

1)如果您要修改这样的文件,您可能需要为目标指定不同的名称,例如foo_unmodifiedfoo_modified,以便Make的依赖项处理能够正常运行这个。

2)如果您的假新规则是您在命令行上调用的规则(“make phonyNewRule”),那么Make将构建在执行file_modifier命令之前要构建的任何其他内容。如果你想构建不在该列表上的目标,你可以这样做:

(phony new rule): $(LIST_OF_FILES_TO_EDIT) $(OTHER_TARGETS)
    file_modifier ...

3)如果您的依赖项设置正确,您可以找出哪些目标依赖于$(LIST_OF_FILES_TO_EDIT),但它不是很整洁。您可以touch其中一个文件,运行make,查看它构建的目标,重复所有文件。你可以通过使用Make参数节省一点时间:“make -n -W foo1 -W foo2 -W foo3 ... -W foo99 all”。这将打印命令 Make will run - 我不知道如何让它告诉你它将重建哪些目标