2010-11-10 6 views
5

Lors de la compilation en utilisant G ++ compilateur GNU chaque fois que je fais construire, sans changer de code source, je reçois un fichier objet binaire différent. Y at-il une option de compilation qui me donnera le même binaire à chaque fois.fichier objet binaire changeant dans chaque build

+0

double possible de [sortie binaire avec déterministes g ++] (http://stackoverflow.com/questions/14653874/deterministic-binary-output-with-g) –

Répondre

10

Copié du GCC homme-page:

-frandom graine = chaîne
Cette option fournit une graine que GCC utilise quand il serait autrement utiliser des nombres aléatoires. C'est utilisé pour générer certains noms de symboles qui doivent être différents dans chaque fichier compilé. Il est également utilisé pour placer des cachets uniques dans les fichiers de données de couverture et les fichiers objet qui produisent eux. Vous pouvez utiliser l'option -frandom-seed pour produire des fichiers objets identiques reproductibles.

La chaîne doit être différent pour chaque fichier que vous compilez.

+0

Merci, cela semble fonctionner pour moi. – user502603

0

Vous devriez mieux utiliser make. De cette façon, si votre source n'a pas changé, la compilation sera ignorée, ainsi les fichiers objets ne seront pas modifiés.

Edit: après réflexion, il est possible de répondre à votre commentaire avec le makefile qui sépare et compilation proprement dite pré-traitement. et quelques trucs sales.

Exemple 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 

S'il vous plaît noter le temps de l'exécutable est modifié, mais le contenu non (si vous avez changé seulement les commentaires, pas le code réel).

+0

Je change la source, mais seulement l'ajout de commentaires ne change pas la programme. Avez-vous une solution pour ce cas? – user502603

+0

En fait non, en changeant le fichier source signifie recompilation :-(Marque et autres outils de construction ne sont pas si intelligent pour comprendre que seuls les commentaires sont modifiés. – Vlad

+0

a étendu la réponse à couvrir votre cas :) – Vlad