Make似乎将文件修改时间与某种内部修改时间缓存进行了比较。有谁知道此缓存位于何处或如何访问它?
使用实用程序,例如strace
,看看它在做什么。在这里,我们可以跟踪-e trace=file
make程序执行的所有文件操作()。
假设我们有foo.c
一个foo
,并使用简单的Makefile从中构建了一个,如下所示:
$ cat Makefile
foo: foo.c
让我们运行make
:
$ strace -e trace=file make
execve("/usr/bin/make", ["make"], [/* 20 vars */]) = 0
...
open("Makefile", O_RDONLY) = 3
stat("Makefile", {st_mode=S_IFREG|0644, st_size=11, ...}) = 0
...
stat("foo", 0x7ffd4373c8c0) = -1 ENOENT (No such file or directory)
stat("foo.c", {st_mode=S_IFREG|0644, st_size=36, ...}) = 0
cc foo.c -o foo
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=27717, si_status=0, si_utime=0, si_stime=0} ---
stat("foo", {st_mode=S_IFREG|0755, st_size=8549, ...}) = 0
+++ exited with 0 +++
在这里,您会看到它检查的存在foo
并找不到它,它检查的存在foo.c
,然后调用规则进行编译。
现在,您可以再次调用make,结果将有所不同:
$ strace -e trace=file make
...
stat("foo", {st_mode=S_IFREG|0755, st_size=8549, ...}) = 0
stat("foo.c", {st_mode=S_IFREG|0644, st_size=36, ...}) = 0
make: `foo' is up to date.
+++ exited with 0 +++
如果使用某种缓存文件,我们希望看到一个open()
和一个read()
反对。如果在两次运行之间使用了此缓存,那么我们也希望看到write()
它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句