2010-11-10 2 views
5

При компиляции с использованием компилятора G ++ GNU каждый раз, когда я выполняю сборку, без изменения исходного кода, я получаю другой двоичный файл объекта. Есть ли параметр компиляции, который будет давать мне один и тот же двоичный файл каждый раз.Изменение двоичного файла объекта в каждой сборке

+0

Возможный дубликат [детерминированных двоичный выход с г ++] (http://stackoverflow.com/questions/14653874/deterministic-binary-output-with-g) –

ответ

10

Скопировано из человека-страницы GCC:

-frandom семян = строка
Эта опция обеспечивает семя, которое GCC использует когда будет иначе использование случайных чисел. Это используется для генерации определенных имен символов, которые должны быть разными в каждом скомпилированном файле. Он также используется для размещения уникальных штампов в файлах данных покрытия и объектных файлов, которые производят . Вы можете использовать опцию -frandom-seed для создания воспроизводимых одинаковых объектных файлов.

Строка должна быть разной для каждого файла, который вы компилируете.

+0

Спасибо, это работает для меня. – user502603

0

Вам следует лучше использовать make. Таким образом, если ваш источник не изменился, компиляция будет пропущена, поэтому объектные файлы не будут изменены.

Редактировать: после некоторого размышления, можно отправить комментарий с помощью make-файла, который отделяет предварительную обработку и фактическую компиляцию. и некоторые грязные трюки.

Пример 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 

Обратите внимание время исполняемого изменяется, но содержимое не (если вы изменили только комментарии, не фактический код).

+0

Я меняю источник, но добавив только комментарии не изменяя программа. У вас есть решение для этого случая? – user502603

+0

На самом деле нет, изменение исходного файла означает перекомпиляцию :-(Make и другие инструменты сборки не настолько умны, чтобы понять, что изменены только комментарии. – Vlad

+0

Продлен ответ для покрытия вашего дела :) – Vlad

Смежные вопросы