2009-08-18 8 views
5

Ich habe ein Problem mit XCode, um mit einer bestimmten Dateistruktur, die ich benutze oder die ich verwenden möchte, umzugehen.XCode Include-Pfade

Ich habe eine Reihe von Dateien in der folgenden Form ...

 

Library 
    Headers 
     Library 
     Package1 
      Header1.h 
      Header2.h 
      HeaderN.h 
     Package2 
      Header1.h 
      Header2.h 
      HeaderN.h 
     PackageN 
      Header1.h 
      Header2.h 
      HeaderN.h 
    Source 
     Package1 
     Source1.m 
     Source2.m 
     SourceN.m 
     Package2 
     Source1.m 
     Source2.m 
     SourceN.m 
     Package3 
     Source1.m 
     Source2.m 
     SourceN.m 

Das ist Modell I für Code will außerhalb dieser Bibliothek ist ...

#import "Library/Package/Header.h" 

Ich mag darauf hinweisen XCode bei Bibliothek/Kopfzeilen, aber nicht bei den internen Ordnern. Wenn ich diese Baumstruktur zum Projekt hinzufüge, scheint XCode implizite Pfade zu jedem Knoten in der Baumstruktur aufzunehmen.

Client-Code innerhalb des Projekts, aber außerhalb dieses Baumes kann dies tun ...

#import "Header.h" 

statt ...

#import "Library/Package/Header.h" 

Ich kann nicht scheinen, einen Weg zu finden, um dissallow nicht qualifizierte Form.

Jede Hilfe würde geschätzt.

Danke, -Römische

Antwort

1

Wenn Sie die Header in Dateien im Projekt dann XCode umfassen wird sie immer ohne Qualifikation Weg finden, wie Sie entdeckt haben. Die beste Lösung besteht darin, die Header aus dem Projekt zu entfernen und "Library/Headers" als Header-Suchpfad in Ihren Projekteinstellungen anzugeben. Die Header werden in Ihrem Projekt nicht angezeigt, aber sie werden auch nicht automatisch von XCode beim Kompilieren gefunden; Client-Code muss den vollständigen Pfad von "Library/Headers" angeben, um zu der gewünschten Header-Datei zu gelangen.

+0

Ich sehe. Das ist eine Schande, wenn ich die Bibliothek und die App gleichzeitig verfasse. Ich denke, ich könnte es immer in ein eigenes Projekt auseinandernehmen. Ich habe versucht, ein Bibliotheksziel innerhalb desselben Projekts zu erstellen, aber das ändert auch nicht die impliziten Pfade. –

+4

Ich habe festgestellt, dass es einen Weg gibt, die Header in Ihrem Projekt zu haben, damit Sie sie leichter bearbeiten können, aber sie nicht vom Projekt gefunden werden. Importieren Sie die Header einfach als Ordnerreferenzen (blau statt gelb in xcode). –

+0

+1 nützlich; Vielen Dank! – fbrereto

6

Sie stoßen auf das Verhalten von Xcode, dass es eine Flat-Headermap erstellt. Sie können dies deaktivieren, indem Sie die Build-Einstellung hinzufügen:

HEADERMAP_INCLUDES_FLAT_ENTRIES_FOR_TARGET_BEING_BUILT=NO 

zu Ihren Projekteinstellungen.