[ 已解决 ]Makefile 中调用 shell 比较两个文件版本日期的问题

在下在弄一个 makefile,需要加入文件拷贝的功能,但是需要先判断原始文件和目标文件的版本是否有差异,如果原始文件比目标文件更新,则执行拷贝~
下面是我的代码,但是执行的时候不论有没有差异都给拷贝了,各位走过路过的大神帮忙看看~ 谢谢!!

	-if  ! -e "$(image_path)"	]; then 
		mkdir $(image_path); 
		cp -f $(source_image) $(image_path)/vmlinux.dsc; 
	elif  ! -e "$(image_path)/vmlinux.dsc" ];then 
		cp -f $(source_image) $(image_path)/vmlinux.dsc; 
	elif  -e "$(image_path)/vmlinux.dsc" ];then 
		diff $(image_path)/vmlinux.dsc  $(source_image);
		if  $$? -n 0 ]; then 
			cp -f $(source_image) $(image_path)/vmlinux.dsc; 
		fi 
	fi

diff 程序的返回值表示该程序是否正常运行,并不表示文件是否有差异性。
况且,diff 也不比较文件的最后修改时间是否不同。
你要判断一个文件是否比另一个文件新,可以采用下面的脚本:

if  file1 -nt file2 ]; 
then 
echo true; 
else 
echo false;
fi

弱弱的问一句,Makefile 里直接写依赖不行啊?文件比较新就替代。。。

非常感谢~我试过是 OK 的~另外想问下 这个 -nt 具体是什么意思呢,是根据内容还是其属性来判断的?谢谢!

感觉应该也是可以的,但是不知道应该怎么写,因为我这个的目标文件不是.o 的文件,没有依赖关系。。。

N ewer T han,通过最后修改时间的,我上面说过了。
请参考这里:
tldp.org/LDP/abs/html/fto.html
ibm.com/developerworks/linux/library/l-bash-test/index.html

1赞

N ewer T han,通过最后修改时间的,我上面说过了。
请参考这里:
tldp.org/LDP/abs/html/fto.html
ibm.com/developerworks/linux/library/l-bash-test/index.html

恩,感谢~

test :
        @echo '123'

@ 是关键。
请参考:
cn.bing.com/search?q=makefile+command+echo&qs=n&pq=makefile+command+echo&sc=0-17&sp=-1&sk=&intlF=1&FORM=TIPEN1
faqs.org/docs/ldev/0130091154_134.htm

哈哈,无回显也可以把回显重定向到 /dev/null。搜索下 shell 重定向就有了。

不是这样的吧,你这样做是把命令的标准输出、标准错误重定向到 /dev/null,这不是楼主要的效果,楼主是要执行命令时不打印要执行的命令本身。

OK~我试试~3Q!

大神!我试过是可以的。。

test:
	@if  $(sourceFile) -nt $(targetFile) ];then \
	cp -f $(sourceFile)  $(targetFile); \
	fi

if else fi和循环里面如果每句前面都加的话就编不过了。。

再次感谢~ :1:

感谢女神苏和 bruce 兄的回复,真心觉得我们这个论坛不错~大神好多啊!!:slight_smile: