Problème de chemin d'accès aux headers / #import

AliGatorAliGator Membre, Modérateur
Bonjour à  tous,

J'ai un petit souci de chemin de headers.
- j'ai un projet A qui génère une librairie statique (libMachin.a)
- j'ai un projet B qui dépend du projet A (j'ai mis le projet A dans "Groups & Files" puis ajouté la Target de ce projet A dans les "direct dependencies" de ma cible de B)

- projetA est dans [...]/composantA/trunk/iPhone/projetA
- projetB est dans [...]/composantB/trunk/iPhone/projetB
- La lib de projetA est configurée pour copier les headers (Build Phase "Copy Headers) dans le dossier (build setting "Public Headers Folder Path") nommé "Headers", ce qui veut dire que mes headers à  importer se trouvent dans [...]projetA/build/iphoneos-Debug/Headers" et toutes les variantes qui vont avec (selon iphoneos ou Simulator et selon Debug/Release)


Bien sûr, moi je souhaite utiliser ma librairie libMachin.a du projetA dans projetB et donc aussi #importer les headers qui vont bien.

1) Donc si je fais :
#import "../../../ComposantA/trunk/iPhone/projetA/build/Debug=iphoneos/Headers/MonHeader.h"
Ca marche, il veut bien compiler... (mais c'est crade bien sûr)
2) Si je met le texte "../../../ComposantA/trunk/iPhone/projetA/build/Debug-iphoneos/Headers/" dans le build settings "Header Search Path" (ou "User Header Search Path") et que je met juste [tt]#import "MonHeader.h"[/tt] ça ne marche plus  ???
3) Et évidemment à  terme je voudrais à  terme mettre "../../../ComposantA/trunk/iPhone/projetA/build//**" (avec la case "Recursive" de cochée) dans mon "Header Search Path" mais bon déjà  sans le mode récursif ça ne marche pas alors... :'(

Des idées ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    13:33 modifié #2
    Bon alors premier élément de réponse :
    - Il faut que je supprime un "../" quand je passe ce préfixe de chemin d'accès du #import au build settings "Header Search Path"
    - En effet quand je met le chemin dans #import, c'est par rapport au fichier .m dans lequel je met l'instruction #import qu'il se réfère (fichier .m qui se trouve être dans un dossier "Classes" de mon dossier projet).
    - Quand je met un chemin relatif dans "Header Search Path", c'est par rapport au projet. Donc le chemin relatif ne part pas du même endroit, il ne faut pas remonter d'autant de niveaux.

    Maintenant, il me reste un truc qui m'étonne un peu, c'est que le mode "recursive" ne semble être reccursif que d'un seul niveau (il ne descend que dans un seul sous-dossier, pas plus profond).

    Du coup si je met "../../ComposantA/trunk/iPhone/projetA/build/Debug-iphoneos" sans préciser le dossier "Headers" que j'enlève de mon chemin donc, du moment que je coche "recursive" (ce qui me rajoute "/**" à  la fin du chemin), ça marche il trouve quand même mon .h en allant le chercher dans "Headers", grace à  l'option "recursive".
    Mais si j'enlève "Debug-iphoneos" espérant que la récursivité va se prolonger d'un 2e niveau, là  ça ne marche plus, il ne me trouve plus MonHeader.h



    Bon l'idéal serait que mon projetA certes génère la librairie libMachin.a dans un sous-dossier par configuration (Debug-iphoneos, Release-iphoneos, ...) pour avoir des binaires différents selon ces cas... mais que mes Headers soient tous au même niveau, à  côté de ces dossiers, indépendemment de la configuration choisie pour compiler la lib, j'imagine. Ce qui somme toute parait plus cohérent, mais bon j'ai déjà  livré le projetA configuré comme ça... Bon, on verra demain :D

    En tout cas c'est casse-tête ces trucs là  :P
    Ca serait quand même pratique (j'ai essayé avec Build & Analyse, mais faut pas rêver ça donne pas plus d'infos) quand on a une erreur "impossible de trouver le header demandé" qu'il nous indique dans quels répertoires (avec chemin d'accès complet) il a cherché avant de nous dire qu'il n'a pas trouvé ! psychoh13, tu nous concocte un nouveau module de LLVM qui ferait ça ? ^^
  • GreensourceGreensource Membre
    13:33 modifié #3
    Je re-ouvre ce sujet puisque le titre correspond particulièrement bien à  mon problème.

    D'abord, je suis d'accord c'est la m**** cette gestion des headers....
    Ensuite mon souci: J'ai des headers dans le dossier $(SRCROOT)/Framework/ARToolKit
    Donc j'ajoute la ligne $(SRCROOT)/Framework/ARToolKit/** à  la variable Header Search Path puisque c'est récursif (un seul niveau)

    Bon bas croyez moi, croyez moi pas, il est pas fichu de me trouver les headers, quand je fait:
    #include <Eden/readtex.h>
    

    J'ai l'erreur classique du fichier introuvable alors que j'ai bien vérifié il est là ...

    Une idée de ce que j'ai pu louper?
Connectez-vous ou Inscrivez-vous pour répondre.