59 votes

Ajouter le chemin de recherche de l'en-tête du système à Xcode

(Je pose cette question à titre de référence, je répondrai immédiatement)

Comment ajouter des chemins de recherche d'en-tête dans Xcode ? Surtout quand on l'inclut avec cette syntaxe :

include <myheader.h>
  1. Ajouter le chemin globalement à tous les projets comme les en-têtes du système.
  2. Ajout d'un chemin d'accès uniquement à un projet spécifique.

103voto

Eonil Points 19404

Nous avons deux options.

  1. Regardez dans Preferences->Locations->"Custom Paths" dans les préférences de Xcode. Un chemin ajouté ici sera une variable que vous pouvez ajouter à "Header Search Paths" dans les paramètres de construction du projet comme "$cppheaders", si vous avez enregistré le chemin personnalisé avec ce nom.

  2. Définir HEADER_SEARCH_PATHS dans les paramètres de construction sur l'info projet. J'ai ajouté "${SRCROOT}" ici sans récursion. Ce paramètre fonctionne bien pour la plupart des projets.

A propos de la 2ème option :

Xcode utilise Clang qui a un jeu de commandes compatible avec GCC. Le GCC a une option -Idir qui ajoute les chemins de recherche de l'en-tête du système. Et cette option est accessible via HEADER_SEARCH_PATHS dans les paramètres de construction du projet Xcode.

Cependant, la chaîne de chemin d'accès ajoutée à ce paramètre ne doit pas contenir de caractères d'espacement car l'option sera transmise telle quelle à la commande shell.

Mais, certains utilisateurs d'OS X (comme moi) peuvent mettre leurs projets sur un chemin comprenant des espaces blancs qui doit être échappé . Vous pouvez l'échapper comme /Users/my/work/a\ project\ with\ space si vous le saisissez manuellement. Vous pouvez également les échapper avec des guillemets pour utiliser une variable d'environnement comme "${SRCROOT}" .

Ou utilisez simplement . pour indiquer le répertoire courant. J'ai vu cette astuce dans le code source de Webkit, mais je ne suis pas sûr que le répertoire courant sera défini comme le répertoire du projet lors de sa construction.

El ${SRCROOT} est une valeur prédéfinie par Xcode. Cela signifie le répertoire source. Vous pouvez trouver plus de valeurs dans Document de référence .

PS. En fait, il n'est pas nécessaire d'utiliser des accolades. {} . J'obtiens le même résultat avec $SRCROOT . Si vous connaissez la différence, faites-le moi savoir.

2 votes

Notez également que ${SRCROOT} est le répertoire contenant le répertoire .xcodeproj, no le répertoire où Xcode place vos fichiers sources (au moins sur mon Xcode 4.6.3). Pour atteindre ma source, j'ai dû aller un niveau plus profond.

5 votes

La différence, avec ou sans accolades, est qu'avec les accolades, le chemin peut contenir des espaces blancs.

2 votes

JE T'AIME POUR L'ASTUCE DU BACKSLASH

12voto

Suivi de la réponse d'Eonil concernant les paramètres au niveau du projet. Lorsque la cible est sélectionnée et que l'onglet Build Settings est sélectionné, il se peut qu'il n'y ait pas de liste sous Search Paths pour Header Search Paths. Dans ce cas, vous pouvez passer de "Basic" à "All" dans la barre de recherche et les chemins de recherche d'en-tête apparaîtront dans la section Chemins de recherche.

4voto

ToothlessRebel Points 306

Pour utiliser des citations juste pour être complet.

"/Users/my/work/a project with space"/**

S'il n'est pas récursif, supprimez le /**

4 votes

Veillez également à utiliser des parenthèses pour les variables, comme indiqué ci-dessus, plutôt que des parenthèses rondes. Ces dernières semblent causer des problèmes d'analyse avec les projets qui comportent des espaces.

3voto

roshi Points 59

Bien que cette question ait une réponse, je l'ai résolue différemment lorsque j'ai eu le même problème. J'ai eu ce problème lorsque j'ai copié des dossiers avec l'option Create Folder references alors la solution ci-dessus d'ajouter le dossier au build_path a fonctionné. Mais lorsque le dossier a été ajouté à l'aide de l'option Create groups for any added folder l'option, les en-têtes ont été récupérés automatiquement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X