我有一个有点复杂的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)是动态确定的(在制作过程之前未知)
我不确定我是否为这个问题选了一个好头衔。 :)
答案 0 :(得分:1)
1)如果您要修改这样的文件,您可能需要为目标指定不同的名称,例如foo_unmodified
和foo_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 - 我不知道如何让它告诉你它将重建哪些目标。