[gelöst] Header systemabhängig einbinden
-
Moin moin allerseits,
ich hab ein Problem dass ich einfach nicht gelöst bekomme. Deswegen wollt ich hier mal nachfragen und hoffe dass mir jemand von euch weiterhelfen kann. Ich hab ein Programm dass über eine soap schnittstelle auf einen webservice zugreift. Diese Programm soll auf windows als auch auf linux funktionieren. Für windows habe ich eine Klasse geschrieben, die gSoap verwenden. Für Linux eine die apache axis benutzt.
Nun zu meiner Frage:
Ist es möglich, dass beim compilieren der compiler, abhängig vom jeweiligen System auf dem er läuft, die entsprechende Klasse, d.h. Header, einbindet?Mein erster Versuch dazu sah so aus, jedoch kam ich dabei zu keinem ergebnis
#ifdef WIN32 #include "gSoapAdmService.h" #endifVielen Dank für eure Hilfe
LG
Sascha
-
Ist schon richtig so.
#ifdef WIN32 #include "gSoapAdmService.h" #elseif UNIX #include "axis.h" #endifich bin mir aber nicht sicher ob das UNIX define auch stimmt...
-
Ja, es ist möglich - je nach System werden andere Präprozessor-Konstanten definiert, mit denen du dann eine #ifdef-Unterscheidung aufbauen kannst. Allerdings müsstest du eventuell mal nachschlagen, wie diese Konstanten wirklich heißen.
-
Zwei Ergänzungen:
Erstens @Chris:
Chris++ schrieb:
Ist schon richtig so.
#ifdef WIN32 #include "gSoapAdmService.h" #elseif UNIX #include "axis.h" #endifdas '#elsif UNIX' ist syntaktisch und/oder semantisch falsch - korrekt sollte es heißen '#elseif defined(UNIX)'.
Zweitens: Für Windows-Oberflächen wird die Konstante _WIN32 (mit Unterstrich) definiert, wie das Äquivalent unter Linux heißt, bin ich nicht sicher.
-
Hi,
erstmal vielen Dank für eure schnelle Hilfe. Hat alles wunderbar funktioniert. Da ich aber auch nicht rausgefunden hab wie das unter linux definiert ist hab ich das ganze einfach mit einen else gelöst. Das Programm soll ja sowieso nur auf windows und linux verwendet werden.
#ifdef _WIN32 #include "gSoapAdmServicCl.h" #else #include "axisAdmServiceCl.H" #endifAlso nochmals vielen Dank
Gruß
Sascha
-
CStoll schrieb:
Zweitens: Für Windows-Oberflächen wird die Konstante _WIN32 (mit Unterstrich) definiert, wie das Äquivalent unter Linux heißt, bin ich nicht sicher.
Hab extra in den Projekteinstellungen vom VC++ 6.0 nachgeguckt ob das nun _WIN32 oder WIN32 war. Bei mir stand jedenfalls nur WIN32.
-
ich würde es vom Compiler abhängig machen, denn unter Solaris könnte
ich z.B. den Sun Compiler oder auch mit dem gcc parallel arbeiten.
Ich kann auch unter Windows mit dem gcc arbeiten, oder parallel mit VC++6 oder
mit DevStudio 2003 oder 2005Also würde ich
__GNU_C
__SUN_CC
#if (_MSC_VER >= 1300 ) // Ab VC++7 DevStudi 2003
...u.s.w. verwenden
-
Diese defines sind Compilerabhängig. Wenn man diese Unterscheidung häufig braucht kann man aber im Code durchgängig nur ein eigenes define verwenden, das aber bei Bedarf compilerabhängig umdefinieren. Ich mach das zumindest bei __FUNC__ so.