我正在使用一组二进制文件,这些二进制文件可以从一组INI文件中“反编译”或“从中”编译。由于二进制文件和INI文件都已检入到我的存储库中,因此我使用了一个小脚本来对所有文件进行(反编译)。
我们的工作流程通常涉及直接编辑二进制文件,并将修改后的二进制文件反编译为INI格式。但是,有时我们需要编辑INI文件并编译对二进制文件的更改。
问题:我可以制作一个makefile来检测哪个集最近被修改,并自动向任一方向发出(反编译)命令以使这两个文件保持同步吗?我更喜欢使用通用的(GNU?)制作功能,但是如果有一个更专业的工具可以工作,我就会不知所措。
(我可以创建两个单独的指令,“ decompile-all”和“ compile-all”。我想知道是否有单命令选项。)
答案 0 :(得分:0)
我不知道这怎么工作。假设它可以在制造中完成;现在您有两个文件foo.exe
和foo.ini
(您不必说出实际的文件名模式是什么)。您运行make并发现foo.exe
比foo.ini
更新,因此它将反编译二进制文件以构建新的foo.ini
。现在,您再次运行make,这一次发现foo.ini
比foo.exe
更新,因为您刚刚构建了前者,因此将foo.ini
编译为foo.exe
。>
等等每次运行make时,它都会对所有文件执行操作,因为一个或另一个总是过时。
唯一可行的方法是:(a)测试文件的上次修改时间是否不完全相同,并且(b)可以重置已编译/反编译文件的时间,以便它与生成该文件的文件完全相同,而不是默认的“ now”。
答案是make不能用于这种情况。您当然可以为自己编写一个小的Shell脚本,该脚本遍历每个文件并测试上次修改时间是否相同,如果未编译,则使用touch -m -r origin
,其中 origin 是修改时间较新的文件,因此两者的修改时间相同。