JicoZa
(JicoZa)
1
在下在弄一个 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
hottea
(hottea)
3
弱弱的问一句,Makefile 里直接写依赖不行啊?文件比较新就替代。。。
JicoZa
(JicoZa)
4
非常感谢~我试过是 OK 的~另外想问下 这个 -nt 具体是什么意思呢,是根据内容还是其属性来判断的?谢谢!
JicoZa
(JicoZa)
5
感觉应该也是可以的,但是不知道应该怎么写,因为我这个的目标文件不是.o 的文件,没有依赖关系。。。
JicoZa
(JicoZa)
7
哈哈,无回显也可以把回显重定向到 /dev/null。搜索下 shell 重定向就有了。
不是这样的吧,你这样做是把命令的标准输出、标准错误重定向到 /dev/null,这不是楼主要的效果,楼主是要执行命令时不打印要执行的命令本身。
JicoZa
(JicoZa)
12
大神!我试过是可以的。。
test:
@if $(sourceFile) -nt $(targetFile) ];then \
cp -f $(sourceFile) $(targetFile); \
fi
if else fi和循环里面如果每句前面都加的话就编不过了。。
再次感谢~ :1:
JicoZa
(JicoZa)
13
感谢女神苏和 bruce 兄的回复,真心觉得我们这个论坛不错~大神好多啊!!