Fichier d’en-tête XCode 4 C ++ avec chemin relatif vers un autre en-tête

J’utilise une bibliothèque avec une structure d’inclusion où les fichiers .h sont tous dans un seul répertoire. Ces fichiers .h contiennent une seule ligne, une directive #include qui pointe vers le fichier d’en-tête ‘réel’ situé dans des emplacements de dossier source spécifiques. Le chemin #include dans ces fichiers est relatif.

Alors, voici un exemple. La structure de répertoire est la suivante:

 /project /sources   ... /include /component foo1.h foo2.h /platformA/something/foo1.h /platformB/somethingelse/foo2.h 

/include/component/foo1.h contient une seule ligne de code: #include "../platformA/something/foo1.h"

/include/component/foo2.h contient la seule ligne de code #include "../platformB/somethingelse/foo2.h"

Dans mes sources, j’ai simplement: #include "component/foo1.h"

Le chemin de recherche en-tête de mon projet pointe vers /include

Maintenant, XCode 4 est capable de trouver le component/foo1.h dans /include , mais il est impossible de suivre le chemin d’inclusion relatif dans ces en-têtes et de trouver le “vrai” foo1.h dans le répertoire `/ platformA / quelque chose ‘, et ainsi de suite. sur.

J’imagine que c’est parce que les chemins d’inclusion dans le fichier de niveau supérieur foo1.h sont relatifs à son emplacement, mais XCode pourrait le traiter comme relatif à un autre emplacement (racine du projet ou autre)? FWIW, Visual Studio n’a aucun problème avec une configuration identique.

Des idées sur ce que je peux faire pour remédier à cela?

Dans votre structure de répertoires, il semble que les répertoires platformA et platformB soient placés en dehors du dossier include. Il y a deux solutions possibles à cela:

Solution A

Déplacez-les pour include dossier.

Solution B

Ajoutez project/platformA et project/platformB aux directories where include files should be looked for dans les parameters du projet.

N’utilisez pas de chemins relatifs. Sérieusement, c’est leur comportement défini par l’implémentation, leur fonctionnement, donc différents compilateurs / environnements / plates-formes se comporteront différemment, et dans votre cas, Xcode invoque presque certainement GCC ou clang dans un répertoire de “construction”, qui peut être ou non un frère de votre répertoire sources.

Ça ne vaut pas le mal de tête.

Mettez platformA et platformB dans include , ou ajoutez un autre répertoire (par exemple, platform-include ), insérez-les ici et ajoutez ce répertoire à votre chemin d’inclusion.