7
votes

Xcode 4 construire sur mesure avant de compiler

J'essaie d'intégrer un outil dans Xcode 4 qui génère un en-tête C d'un fichier de descripteur. Dans Xcode 3, il a fonctionné pour ajouter une étape de construction personnalisée pour les fichiers avec une extension spécifique. Ces fichiers sont ensuite compilés avant les fichiers .m / .mm / .cpp qui les comprenaient. Lorsque j'essaie de le faire avec Xcode 4, il semble que cela exécute mon étape personnalisée après la compilation de l'autre source. Cela ne fonctionne pas bien sûr. Y a-t-il un moyen de dire à Xcode d'exécuter l'étape avant?

Voici une simple reproduction de reproduction:

Entrez la description de l'image ici

My MAIN.M contient un: xxx

et j'ai ajouté $ {dérived_file_dir} au chemin de la recherche d'en-tête. Quand je compile ce projet, je reçois ce qui suit:

Entrez la description de l'image ici

Si je supprimais l'inclure et la construisez-la à nouveau, je reçois ceci:

Entrez l'image Description Ici

Donc, la règle fonctionne effectivement, mais elle est exécutée trop tard. Y a-t-il un moyen de changer ce comportement?


1 commentaires

Cela peut être un peu tardif, mais cela fonctionnerait-il si vous avez créé une cible de construction distincte qui vient de créer les en-têtes, puis a ajouté cette cible comme une dépendance de votre objectif principal?


3 Réponses :


3
votes

Plutôt que d'ajouter une règle de construction: dans l'onglet Phases de construction, à l'aide du bouton Ajouter une phase de construction, choisissez Ajouter un script d'exécution. Une phase de script d'exécution sera ajoutée dans laquelle vous pouvez implémenter vos exigences de script. La nouvelle phase de script d'exécution peut être déplacée vers la phase de source de compilée qui est lorsque vous souhaitez exécuter votre fonctionnalité.


3 commentaires

Cela signifie que je devrai ajouter tous les fichiers manuellement (il y en aura plus d'une) comme entrée / sortie à cette phase de construction. Je suppose que cela devrait fonctionner, mais ce serait bien plus gentil de l'avoir à fonctionner en ajoutant simplement le fichier d'entrée au projet et correspond à l'extension.


Fraîchez votre script pour utiliser des expansions de coquille et des caractères génériques. Cela va le rendre dynamique et faible maintenance. Bien que trop profondément dans les scripts de Shell est hors tension en ce qui concerne cette question cependant.


Je préférerais ne pas faire ça puisqu'il va probablement confondre la vérification de la dépendance.



0
votes

Vous devez ajouter une dépendance explicite entre le fichier généré et votre cible.

Ouvrez le répertoire dérivéData de Finder, sélectionnez le fichier myTest.h et faites-la glisser dans xcode dans votre projet. Je crée généralement un nouveau groupe appelé "Fichiers dérivés" et placez de tels fichiers sous celle-ci.

Pour trouver facilement le répertoire dérivéData, je modifie les paramètres du projet afin qu'il effectue le projet de répertoire relatif (voir fichier -> Paramètres du projet, l'onglet Construction).

Une fois que le fichier est référencé dans le projet, vous devez l'ajouter à la règle principale des sources de compilation cible. Sélectionnez la cible principale du projet, développez les sources de compilation si elle n'est pas déjà développée et faites glisser le fichier dérivé nouvellement ajouté dans la liste des fichiers à compiler.

Enfin, puisque vous voulez vraiment compiler ce fichier, vous voudrez peut-être le renommer à .m ou .c, au lieu de .h.

Mise à jour: ressemble en fait que ce qui précède ne fonctionne pas tout le temps. Le moyen le plus fiable est d'utiliser une phase de construction au lieu d'une règle de construction.


0 commentaires

7
votes

J'ai déjà mon badge de renaissance, mais voici :)

Je viens de courir dans ce problème et la réponse est simple (maintenant, j'ai passé une demi-journée à regarder).

La règle de construction répond au fichier source (.abc) et le fichier source est en cours de traitement dans l'ordre indiqué dans l'étape de construction "Compile Sources". Entrez simplement dans la règle de construction et faites glisser le .abc en haut de la liste.

Un petit pas vers mon badge archéologue, j'espère.


0 commentaires