IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Bug VS2008 : Fichier source généré mais pas compilé


Sujet :

Visual C++

  1. #1
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut Bug VS2008 : Fichier source généré mais pas compilé
    Bonjour!

    Note: j'utilise VS2008 Pro et Python 2.5

    Dans mon projet, j'ai un script python lancé avant la compilation (pre-build event) qui (ré)génère simplement un fichier cpp qui contient des constantes dont la valeur est toujours modifiée (numéro de version et timestamp).

    Or apparamment il y aurait une subtilitée concernant la detection de changement de code source dans Visual Studio OU ALORS mon script python (très simple pourtant) n'est pas correct.

    D'abord, le script python qui génère le fichier (le contenu est généré auparavant) :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # write the resulting code file
    	resultCodeFile = open( NR_VERSION_CPP_FILE, "w" )
    	resultCodeFile.write( resultCode )
    	resultCodeFile.close()

    Note: J'ai aussi essayé avec "w+" sans plus de succès.

    Donc, ce script génère bien le fichier a chaque fois que je fais une build, quel que soit la façon de builder le projet (F5, build entière du projet etc) et quelque soit la configuration (Debug/Release).

    J'affiche les valeures des constantes générées par le script au runtime.

    Or en testant tout a l'heure plusieurs fois, je me suis rendu compte que si je fais F5 pour lancer mon projet, puis si je modifie un cpp puis refait F5 (build incrémentale ) , la valeur du timestamp (normalement changé par la régénération du cpp) n'a pas changé.
    Si encore une fois je refais F5, là la valeur a changé.

    En observant le log de build, je me suis rendu compte que même si le fichier est effectivement changé à toutes les build, il n'est pas forcément recompilé à chaque fois (du moins en incrémental).
    A priori, on dirait bien que Visual Studio (ou alors cl seulement?) n'a pas pris en compte le changement de contenu du fichier lors de la build incrémental, mais reprends en compte le changement a la prochaine.

    De loin, je dirais que soit a) Visual Studio se base sur une information pas tout a fait précise concernant mon fichier généré, soit b) mon script python ne ferme pas immediatement le fichier généré une fois terminé, laissant VS se baser sur l'ancien etat du fichier et donc VS considère qu'il n'y a pas eu de changement?

    Dans tous les cas, j'ai reproduis le problème dans un petit projet (archive ci-joint).

    Pour voir le bug il faut :

    1) Compilez le projet une première fois. Vous noterez que le contenu de Test.cpp a changé, il contient une constante avec une valeur timestamp correspondant au moment ou le script python (pre_build.py) s'est executé;
    2) Lancez l'application : elle affiche le timestamp. Comparez avec le contenu généré dans le cpp : c'est bien la même valeur;
    2) Ajoutez une instruction dans main.cpp ou décommentez la ligne commentée.
    3) Faites F5 pour lancer une build incrémentale et lancer l'application dans la volée : le timestamp qui s'affiche correspond au même que dans 2), pourtant le fichier cpp a bien été modifié et vous pouvez comparer les valeurs : elles sont différentes (le contenu du cpp ayant logiquement un timestamp supérieur).

    Ce problème n'est pas grave en soit parceque je ne compte pas distribuer de version qui ne soit pas entièrement recompilée, mais c'est inquiétant, non?
    J'espère que le problème viens du script...

    Est-ce que quelqu'un sait où est le problème ou bien un moyen de le contourner? (forcer la build systématique d'un cpp par exemple?)
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Personne n'a remarqué ce problème? O__o? (au passage, je ne trouve plus l'adresse sur site de bugtracking de visual studio...)


    Est-ce que quelqu'un ici sait comment forcer la build systématique d'un cpp?

  3. #3
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Après diverses investigations, il semblerait que VS fasse la vérification des modifications des fichiers à compiler AVANT d'executer les commandes pre-build !

    Une solution possible (et effectivemetn efficace) est d'ajouter un script post-build qui détruit l'obj du fichier qui est généré en pre-build, forcant VS a toujours le recompiler.


    Bon a savoir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/02/2009, 18h25
  2. Réponses: 1
    Dernier message: 04/12/2008, 23h42
  3. Erreur "Fichier source n'a pas pu etre compilé"
    Par gre1307 dans le forum Dev-C++
    Réponses: 1
    Dernier message: 31/01/2008, 20h22
  4. "Le fichier source n'a pas encore été compilé"
    Par laurrrette dans le forum OpenCV
    Réponses: 2
    Dernier message: 07/08/2007, 09h07
  5. Download fichier ok local mais pas en "web"
    Par Mystic eyes dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 20/06/2006, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo