每次进行构建时使用G ++ GNU编译器进行编译时,如果不更改源代码,我会获得不同的二进制对象文件。是否有一个编译选项,每次都会给我相同的二进制文件。
答案 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
请注意,可执行文件的时间已更改,但内容未更改(如果您只更改了注释,而不是实际代码)。