时间戳linux Makefile &…
2016-03-04 09:59
337 查看
1、linux时间戳的实际意义
时间戳的概念可以从日常信封的邮戳概念上理解。邮戳的收到信件的时间,而时间戳就是文件的修改时间。
假设当前目录下有framwords文件或文件夹,如执行stat
frameworks,即可看到当前目录下framworks文件的时间戳,其中包括存取时间(Access)、修改时间(Modify)、文件节点修改时间(Change):
File: `frameworks/'
Size:
4096
Blocks:
8
IO Block: 4096 directory
Device:
807h/2055d
Inode:
287018
Links: 5
Access: (0755/drwxr-xr-x) Uid:
(
500/
san) Gid: (
500/
san)
Access: 2009-10-25 17:00:33.000000000 +0800
Modify: 2009-10-25 06:44:00.000000000 +0800
Change:
2009-10-25 06:44:00.000000000 +0800
2、时间戳再分布式并行运算中的重要性
网络文件系统(NFS
)是一个依赖时间的网络应用,它完全依赖各个工作站给服务器上的文件提供时间戳。当一个文件被创建或者被修改了,终端工作站的时钟被作为时间戳加在文件上。因此,如果客户端的时钟不同于服务器的时钟,则文件的时间戳将有不同。很多应用,从磁盘备份到生成程序都使用时间戳来确定哪个文件是最新的。在这种情况下,错误的时间戳意味着重大的文件损失,也就是工时和机时的损失。
计算机程序员经常需要“make” 程序来编译代码生成软件应用程序,“make”
程序完全依赖各个文件的时间戳来确定哪个文件最近被修改了,随后决定哪个文件需要重新生成。如果“make”
程序在一个分布式文件系统中应用,比如NFS
,一台终端标记的时间戳和其它终端标记的会有不同,除非时钟是同步的。如果两台终端的时间不一致,这时运行“make”
就会发生严重的错误。对于有些“make”
程序,允许的时间偏差可以大一些,但是从典型意义上来说,与单独一次编译差不多,这段时间对于今天的计算机来说只不过是几秒钟而已。
很多情况下,有很多终端和一台生成程序的主机。一个工程组可能保留一台最快的计算机来生成所有的程序,或者可能是来自几台不同机器的同一个项目的很多程序员。客户端使用自己的计算机编辑文件,而另外一台计算机编译这些文件。如果两台计算机的时间不同,导致的问题可能是好的话简单的浪费了一台计算机资源,或者严重的话就是不能包含一些最新生成的代码。
3、获取某个文件的时间戳
stat [File] | grep -i Modify | awk -F. '{print $1}' | awk '{print
$2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
4、遍历修改文件的时间戳
find ./* -exec touch {} \;
5、实例
test.c
#include
int main()
{
printf("Hello,it's me!\n");
return 0;
}
Makefile
test:test.o
gcc -o test
test.o
%.o:%.c
gcc -c
test.c
clean:
rm -rf *.o
test
(1)、编译后产生test.o及其test文件,进行如下测试说明make时间戳的问题:
touch test.c
touch test.o
touch test
依次执行上述指令,则不会再次执行make。
(2)、如果单独 执行:
touch test.o
则会gcc -o test test.o
(3)、如果是将test文件删除,再建立一个test文件,然后再执行make是不会去重新编译的。
以上(1)、(2)、(3)点说明了linux
Makefile的时间戳问题,即:只要目标文件比依赖文件(源文件)新,那么就不会重新编译。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sanlinux/archive/2009/10/23/4721299.aspx
时间戳的概念可以从日常信封的邮戳概念上理解。邮戳的收到信件的时间,而时间戳就是文件的修改时间。
假设当前目录下有framwords文件或文件夹,如执行stat
frameworks,即可看到当前目录下framworks文件的时间戳,其中包括存取时间(Access)、修改时间(Modify)、文件节点修改时间(Change):
File: `frameworks/'
Size:
4096
Blocks:
8
IO Block: 4096 directory
Device:
807h/2055d
Inode:
287018
Links: 5
Access: (0755/drwxr-xr-x) Uid:
(
500/
san) Gid: (
500/
san)
Access: 2009-10-25 17:00:33.000000000 +0800
Modify: 2009-10-25 06:44:00.000000000 +0800
Change:
2009-10-25 06:44:00.000000000 +0800
2、时间戳再分布式并行运算中的重要性
网络文件系统(NFS
)是一个依赖时间的网络应用,它完全依赖各个工作站给服务器上的文件提供时间戳。当一个文件被创建或者被修改了,终端工作站的时钟被作为时间戳加在文件上。因此,如果客户端的时钟不同于服务器的时钟,则文件的时间戳将有不同。很多应用,从磁盘备份到生成程序都使用时间戳来确定哪个文件是最新的。在这种情况下,错误的时间戳意味着重大的文件损失,也就是工时和机时的损失。
计算机程序员经常需要“make” 程序来编译代码生成软件应用程序,“make”
程序完全依赖各个文件的时间戳来确定哪个文件最近被修改了,随后决定哪个文件需要重新生成。如果“make”
程序在一个分布式文件系统中应用,比如NFS
,一台终端标记的时间戳和其它终端标记的会有不同,除非时钟是同步的。如果两台终端的时间不一致,这时运行“make”
就会发生严重的错误。对于有些“make”
程序,允许的时间偏差可以大一些,但是从典型意义上来说,与单独一次编译差不多,这段时间对于今天的计算机来说只不过是几秒钟而已。
很多情况下,有很多终端和一台生成程序的主机。一个工程组可能保留一台最快的计算机来生成所有的程序,或者可能是来自几台不同机器的同一个项目的很多程序员。客户端使用自己的计算机编辑文件,而另外一台计算机编译这些文件。如果两台计算机的时间不同,导致的问题可能是好的话简单的浪费了一台计算机资源,或者严重的话就是不能包含一些最新生成的代码。
3、获取某个文件的时间戳
stat [File] | grep -i Modify | awk -F. '{print $1}' | awk '{print
$2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
4、遍历修改文件的时间戳
find ./* -exec touch {} \;
5、实例
test.c
#include
int main()
{
printf("Hello,it's me!\n");
return 0;
}
Makefile
test:test.o
gcc -o test
test.o
%.o:%.c
gcc -c
test.c
clean:
rm -rf *.o
test
(1)、编译后产生test.o及其test文件,进行如下测试说明make时间戳的问题:
touch test.c
touch test.o
touch test
依次执行上述指令,则不会再次执行make。
(2)、如果单独 执行:
touch test.o
则会gcc -o test test.o
(3)、如果是将test文件删除,再建立一个test文件,然后再执行make是不会去重新编译的。
以上(1)、(2)、(3)点说明了linux
Makefile的时间戳问题,即:只要目标文件比依赖文件(源文件)新,那么就不会重新编译。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sanlinux/archive/2009/10/23/4721299.aspx
相关文章推荐
- 解决linux启动时无法进入命令行问…
- linux下svn客户端安装及环境配置
- 统计每个ip的访问量--linux--acces…
- Linux学习
- linux 下 进程和线程的…
- Linux 应用无法使用
- linux下的文件和目录权限!
- linux -vi操作
- CentOS 更换软件源
- CentOS VSFTP采用RPM包安装方式
- Linux 服务器 网站及数…
- Linux下安装Maven
- ansible安装
- vps安装centos系统LNMP环境详细配…
- vps安装centos系统LNMP环境详细配…
- vps安装centos系统LNMP环境详细配…
- yum升级CentOS 6.5 kernel至3.10.52
- VI编辑器的配置
- linux虚拟机,安装samba,共享文件夹
- Linux常用命令