2009-02-09 7 views
1

Je développe un DSL avec son propre éditeur graphique. Ces fichiers ont une extension .own. J'ai aussi un petit outil qui compile les fichiers .own dans les fichiers .h.Utiliser des fichiers de langue spécifiques au domaine dans le projet C++

X.own -.> X.h et X/* h

J'ai écrit un simple fichier .rules pour lancer la génération.

Mon problème est le suivant: La plupart de mes fichiers sources comprennent X.h, mais un changement de X.own ne signifie pas que le X.h généré (ou tout autre fichier généré) seront différents. Cela est traité par le générateur grâce à l'utilisation de fichiers temporaires et la comparaison de fichiers. Mais Visual Studio ne semble pas savoir comment gérer tout cela. Si je mets la propriété "output file (s)" au bon fichier (s), il suppose toujours qu'ils seront changés. Si je ne le fais pas, il génère son processus de construction en supposant qu'il ne le sera pas!

Comment puis-je faire les choses correctement?

1) Lancer la construction personnalisée outil

2) Compute processus de construction basé sur les dépendances

Répondre

0

La réponse de jheriko est intéressante, car elle fournit un moyen de lancer un outil personnalisé, puis de générer des dépendances de construction. Mais ce n'est pas très utile, parce que vous perdez alors toutes les possibilités d'utiliser boîte à outils « construire sur mesure des outils », dans lequel vous pouvez

  • choisir de compiler toujours les fichiers avec une extension précise
  • sauter manuellement construire sur mesure pour un particulier déposer dans une configuration de projet particulière (et visualiser cette décision)

Il n'y a aucun moyen (ou du moins je n'en ai trouvé aucun) de "tout avoir". La seule façon que j'ai trouvé est de faire en sorte que l'outil de construction personnalisé retourne un nombre différent de zéro lorsque les fichiers ont été mis à jour, avec un message à l'utilisateur expliquant qu'il est pas une erreur et l'invitant à lancer de nouveau build. La prochaine fois, l'outil de construction personnalisé est à nouveau lancé (pas optimal, mais l'outil que j'utilise est assez rapide) mais ne modifie aucun nouveau fichier, et le processus de construction continue, en utilisant des dépendances valides.

Remarque: l'approche décrite ci-dessus ne fonctionne pas avec Incredibuild, qui semble ignorer l'ordre de génération du projet.

1

Ne pas utiliser les options de l'outil de génération personnalisée mais le configurer comme un événement pré-construction pour la solution (cela peut prendre une ligne de commande générale, tout comme l'outil de construction personnalisé). De cette façon, MSVS n'examinera pas les fichiers générés. Tant qu'ils sont inclus ou répertoriés dans l'explorateur de solution, ils doivent être compilés correctement car la génération des fichiers .h aura lieu avant toute autre compilation. Je trouve que l'outil de construction personnalisé n'est pas aussi utile que les événements de pré- et post-construction en général, en raison de la façon dont il s'attend à ce que les fichiers soient générés ou modifiés. Vous pourriez trouver cet outil utile pour d'autres choses dans le futur (par exemple pour compresser le .exe après construction, pour générer correctement d'autres dépendances, pour s'assurer que les fichiers sont en place etc ...)

Il y a un joli diagramme montrant où pour trouver ces options dans les propriétés de la solution here

+0

Merci, je vais examiner cela. Mais je ne peux m'empêcher de me demander ... Si je n'utilise pas de fichiers de règles, devrais-je modifier l'événement de pré-construction chaque fois que j'ajoute ou renomme un.propre fichier? –

+0

Pas nécessairement. Cela dépend de la façon dont vous écrivez l'événement de pré-construction et l'outil lui-même. Afaik, ce n'est pas différent de l'outil de construction personnalisé où vous devez également changer les noms de fichiers. Si l'outil prend juste tout .own et les transforme en .h cela devrait être un non-problème. – jheriko

Questions connexes