如果您因为认为这不可能而单击它,那么在遇到它之前,我一直在想同样的事情。
我正在做一个项目,用 C 语言为 PIC 编写,它是用 Makefile 构建的。Makefile 非常杂乱无章,所以我想清理它。为了确保在执行此操作时没有破坏任何内容,我在新制作后记录了所有文件的哈希值:(此项目中没有子目录。使用 SDCC 和 GPUTILS 构建。)
make clean
make
md5sum ./* > ../allsums.txt
然后我修改了 Makefile 并再次尝试,这次将生成的文件与allsums.txt进行比较。
make clean
vim Makefile
make
md5sum -c ../allsums.txt
有趣的是,.o 文件的哈希值不匹配,但最终结果匹配。假设问题是我以某种方式创造的,我花了很多时间试图找到它。
然后,凭直觉,我使用原始 Makefile 做到了这一点:
make clean
make
md5sum ./* > ../allsums.txt
make clean
make
md5sum -c ../allsums.txt
我发现这里的目标文件也发生了变化!一些搜索使我想到了这个问题,这证实了(至少对于 gcc).o 文件在每次编译之间都会发生变化。
这是什么原因造成的?