Dependencies make程序在哪里存储其信息?

Dependencies make程序在哪里存储其信息?,dependencies,makefile,gnu-make,Dependencies,Makefile,Gnu Make,make如何确切地知道文件是否被修改以运行某些规则?这些信息必须在某个地方,所以是否有一个文件存储在某个地方,带有来自文件的时间戳 有很多make程序,因此我不确定依赖项检查背后的原理是否对所有程序都是一样的。如果他们有很大的不同,我最感兴趣的是GNU制造;尽管知道其中的任何差异都是很好的。检查输入和输出的时间戳。例如,如果a.o早于a.c,它会假定您必须对其进行了编辑,并且需要重新制作.o。检查输入和输出的时间戳。例如,如果.o早于a.c,则它假定您必须已对其进行了编辑,并且需要重新制作.o。

make如何确切地知道文件是否被修改以运行某些规则?这些信息必须在某个地方,所以是否有一个文件存储在某个地方,带有来自文件的时间戳


有很多make程序,因此我不确定依赖项检查背后的原理是否对所有程序都是一样的。如果他们有很大的不同,我最感兴趣的是GNU制造;尽管知道其中的任何差异都是很好的。

检查输入和输出的时间戳。例如,如果a.o早于a.c,它会假定您必须对其进行了编辑,并且需要重新制作.o。

检查输入和输出的时间戳。例如,如果.o早于a.c,则它假定您必须已对其进行了编辑,并且需要重新制作.o。

它从文件系统实时读取时间戳。

它从文件系统实时读取时间戳。

简单。比较源文件(修改日期、创建日期等存储为文件信息的一部分)和输出文件(可执行文件或目标文件)上的时间戳。如果源文件“较新”,则重新编译


有时,当我的源文件上有错误的时间戳时,例如,我在将来设置日期的计算机上编辑它们,然后我只需触摸*我的源文件以更改时间戳,它就会工作。

简单。比较源文件(修改日期、创建日期等存储为文件信息的一部分)和输出文件(可执行文件或目标文件)上的时间戳。如果源文件“较新”,则重新编译


有时当我的源文件上有错误的时间戳时,例如,我在将来设置日期的计算机上编辑它们,然后我只需
触摸*
我的源文件以更改时间戳,它就会工作。

只有通过
build\u check target\u New
请求时,才使用传统的方法。这是因为网络文件系统在时间戳上并不总是一致的,当您复制文件时,它们可能会被修改。此外,具有秒精度(FAT甚至2s)的文件系统仍然广泛分布。现在在那个时候会发生很多事情

因此,makepp计算内容的智能签名(不包括注释和不重要的空白,例如对于C语言家族)。然后将其存储在
.makepp/yoursourcename.mk
中,并将在下次提取以查看是否有重大变化。所有依赖项的智能签名(顺便说一句,它们是自动检测的)以及命令字符串和一些其他细节,然后决定是否需要重建


还有很多事情要做。除了做GNU make所能做的几乎所有事情外,还有很多更有用的事情,你甚至可以通过一些Perl编程来扩展你的make文件。

传统的方法只有在通过
构建\u检查目标\u更新的
请求时才使用。这是因为网络文件系统在时间戳上并不总是一致的,当您复制文件时,它们可能会被修改。此外,具有秒精度(FAT甚至2s)的文件系统仍然广泛分布。现在在那个时候会发生很多事情

因此,makepp计算内容的智能签名(不包括注释和不重要的空白,例如对于C语言家族)。然后将其存储在
.makepp/yoursourcename.mk
中,并将在下次提取以查看是否有重大变化。所有依赖项的智能签名(顺便说一句,它们是自动检测的)以及命令字符串和一些其他细节,然后决定是否需要重建


还有很多事情要做。除了做GNU make所能做的几乎所有事情外,还有很多更有用的事情,您甚至可以通过一些Perl编程来扩展make文件。

它对实际文件名使用
stat()
系统调用。当它运行时,它会记录它运行的文件的时间,但每次运行时它都会通过查看文件系统来重新建立时间。它对实际文件名使用
stat()
system调用。当它运行时,它会记录下它运行的文件的时间,但是每次运行时它都会通过查看文件系统来重新建立时间。那么它就这么简单了,是吗?令人惊讶的是,我没有得到这个解决方案。所以就这么简单,是吗?令人惊讶的是,我无法得出这个解决方案。