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?)
Partager