web-dev-qa-db-fra.com

Ajout d'un chemin de recherche d'en-tête système à Xcode

(En posant cette question à des fins de référence, je répondrai immédiatement)

Comment ajouter des chemins de recherche d'en-tête à Xcode? Surtout lors de l'inclusion avec cette syntaxe:

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

Nous avons deux options.

  1. Regardez Préférences-> Emplacements -> "Arbres source" dans la préférence de Xcode. Un chemin ajouté ici sera un chemin au niveau du système et disponible pour être inclus pour tous les projets.

  2. Ensemble HEADER_SEARCH_PATHS paramètre dans les paramètres de construction sur les informations du projet. J'ai ajouté "${SRCROOT}" ici sans récursivité. Ce paramètre fonctionne bien pour la plupart des projets.

À propos de la 2e option:

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

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

Mais, certains utilisateurs d'OS X (comme moi) peuvent mettre leurs projets sur le chemin, y compris les espaces qui doivent être échappés . Vous pouvez y é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 sur le code source de Webkit, mais je ne suis pas sûr que le répertoire actuel sera défini sur le répertoire du projet lors de sa construction.

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

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

99
Eonil

Suivi de la réponse d'Eonil concernant les paramètres au niveau du projet. Avec la cible sélectionnée et l'onglet Paramètres de construction sélectionnés, il ne peut y avoir aucune liste sous Chemins de recherche pour les chemins de recherche d'en-tête. Dans ce cas, vous pouvez passer de "Tout" à "De base" dans la barre de recherche et les chemins de recherche d'en-tête s'afficheront dans la section Chemins de recherche.

12

Pour utiliser des guillemets juste pour être complet.

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

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

4
ToothlessRebel

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 rencontré 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 du Create groups for any added folder option, les en-têtes ont été récupérés automatiquement.

3
roshi