每个构建中的二进制对象文件更改

时间:2010-11-10 01:00:59

标签: c++ g++

每次进行构建时使用G ++ GNU编译器进行编译时,如果不更改源代码,我会获得不同的二进制对象文件。是否有一个编译选项,每次都会给我相同的二进制文件。

2 个答案:

答案 0 :(得分:10)

从GCC手册页复制:

  

-frandom种子=串
  此选项提供GCC在其他情况下使用的种子   使用随机数。它是   用于生成必须不同的某些符号名称   在每个编译的文件中。它   还用于在coverage数据文件中放置唯一的标记   和生成的目标文件   他们。您可以使用-frandom-seed选项生成可重现的相同目标文件。

     

对于您编译的每个文件,字符串应该是不同的。

答案 1 :(得分:0)

您最好使用make。这样,如果您的源没有更改,将跳过编译,因此不会更改目标文件。

编辑:经过一番思考后,可以使用分隔预处理和实际编译的makefile来解决你的注释。还有一些肮脏的伎俩。

示例makefile:

all: source

source: source.i.cpp
    @cmp -s source.i.cpp source.i.prev || g++ source.i.cpp -o source
    @touch source
    @cp source.i.cpp source.i.prev

source.i.cpp: source.cpp
    @g++ -E source.cpp >source.i.cpp

请注意,可执行文件的时间已更改,但内容未更改(如果您只更改了注释,而不是实际代码)。