make 如何确定文件是否被修改,以运行某些规则?这些信息必须放在某个地方,那么是否存储了一个文件存储时间戳的文件?
有很多 make 程序,因此我不确定依赖项检查背后的原理是否对所有程序都相同。如果它们差别很大,我最感兴趣的是GNU Make;虽然知道任何差异会很好。
答案 0 :(得分:4)
检查输入与输出的时间戳。例如,如果.o比.c更旧,则假定您必须编辑它并且.o需要重新制作。
答案 1 :(得分:2)
简单。比较源文件上的时间戳(修改日期,创建日期等作为文件信息的一部分存储)和输出文件(可执行文件或目标文件)。如果源文件是“newer”,则重新编译。
有时我的源文件上有错误的时间戳,例如我在将来设置日期的计算机上编辑它们,然后我只需touch *
我的源文件来更改时间戳并且它可以正常工作。
答案 2 :(得分:1)
它从文件系统中实时读取时间戳。
答案 3 :(得分:0)
makepp仅在build_check target_newer
请求时才使用传统的方法。这是因为网络文件系统并不总是在时间戳上达成一致,并且在复制文件时可以修改它们。具有秒精度(FAT甚至2s)的文件系统仍然广泛传播。现在很多时候都会发生。
因此,makepp计算内容的智能签名(不包括注释和不重要的空白区域,例如C语言系列)。然后将其存储在.makepp/yoursourcename.mk
中,并在下次检索时查看是否有重大更改。所有依赖项的智能签名(自动检测到btw。)以及命令字符串和其他一些细节然后决定是否需要重建。
makepp还有很多。除了做几乎所有GNU make之外,还有更多有用的东西,你甚至可以通过一些Perl编程扩展你的makefile。