5 Stimmen

Einfügen der .h-Datei aus einem anderen Programm/Verzeichnis

Ich habe einige .h-Dateien wie folgt (unter Linux)

Source/Server/connect.h
Source/Server/message.h
...

Ich entwickle eine andere Anwendung, die die beiden .h-Dateien benötigt, sich aber in einem anderen Verzeichnis befindet

Source/App2/..

Wie kann ich die connect.h-Datei in der App2-Anwendung einschließen, wenn man bedenkt, dass ich Perforce verwenden und jeder, der an der Anwendung arbeitet, seine eigene Kopie haben würde, so dass das Hinzufügen eines absoluten Pfads zur Include-Bibliothek möglicherweise keine gute Idee ist, aber im nicht sicher.

EDIT: Ich verwende einen proprietären Build-Mechanismus für die Erstellung des Codes, so wird nicht in der Lage sein, gcc-Optionen direkt angeben.

17voto

James McNellis Punkte 337231

Sie können #include einen relativen Pfad zu den Dateien:

#include "../Server/connect.h"

oder Sie können ein Flag hinzufügen, das den Compiler anweist, in einem anderen Verzeichnis zu suchen. Für gcc können Sie verwenden -I../Server ; für Visual C++ können Sie verwenden /I"../Server" Andere Compiler haben sicher ihre eigenen Flags für diesen Zweck.

Ich denke, dass die zweite Variante in den meisten Fällen besser ist, da sie es Ihnen erlaubt, Ihre Projekte zu verschieben, während Sie den Include-Pfad nur an einer Stelle ändern müssen (in den Makefiles oder Property Sheets).

3voto

Drakosha Punkte 11577

Was über das Hinzufügen von Include-Suchpfad zum Compiler, für gcc ist es -I Schalter.

3voto

Thomas Matthews Punkte 54757

Ich schlage vor, die Pfade aus der #include Erklärungen. Wie bereits von anderen erwähnt, geben Sie die Pfade in die Parameter des Compilers ein. Lösen Sie die Pfadunterschiede in der makefile oder verwenden Sie Umgebungsvariablen (möglicherweise müssen Sie beides tun).

Meiner Erfahrung nach werden Dateien verschoben. Alles, was keine relativen Pfade verwendet, wird die Erstellung abbrechen (was sehr schlecht ist).

1voto

plinth Punkte 46829

Zusätzlich zu statischen relativen Pfaden können Sie auch mit Präprozessor-Schikanen spielen. Eine Technik, die ich bei Adobe für plattformübergreifenden Code gesehen habe, war so etwas wie diese:

/* globalplatform.h */
#ifdef MAC
#define PLATFORM "../Platform/Mac/MacPlatform.h"
/* custom standard IO etc */
#define STDIO "../Platform/Mac/io/stdio.h"
#define CTYPE "../Platform/Mac/io/ctype.h"
#endif
#ifdef WIN32
#define PLATFORM "../Platform/Win/WinPlatform.h"
#define STDIO <stdio.h>
#define CTYPE <ctype.h>
#endif
/* etc */
#ifndef PLATFORM
#error undefined PLATFORM
#endif

/* some C file */
#include "globalplatform.h"
#include PLATFORM
#include STDIO
/* don't need CTYPE, no penalty */

Während das Plattformproblem nicht Ihr Problem ist, können Sie die relativen Pfade auf der Grundlage der Build-Konfiguration definieren, wenn Sie wollen, und die Konfigurationsänderungen erfolgen an einer Stelle statt an vielen und die Client-Dateien ziehen nur das ein, was sie brauchen. Der Nachteil ist, dass alle Werkzeuge, die Sie zum Durchsuchen von Header-Dateien (Rechtsklick und so weiter) verwenden, nicht mehr funktionieren.

0voto

Liz Albin Punkte 1473

Sie können die Compiler-Direktiven wie oben beschrieben ändern oder den Pfad in Ihrem Code ändern (entweder relativ oder absolut).

Ich würde vorschlagen, dass Sie die besten Speicherorte für Header und Objektdateien (und Bibliotheken) für alle Ihre Projekte überlegen und diese einrichten.

Wenn Sie Standard-Include- und -Lib-Speicherorte haben, vereinfachen Sie die Entwicklung auf dem Weg dorthin.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X