 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Jens Lenge Guest
|
Posted: Wed May 10, 2006 9:09 pm Post subject: Compiler-/Linkerpfade portabel setzen? |
|
|
Hallo Welt,
a) gibt es einen standardisierten Weg (Präprozessoranweisungen o.
ä.), _innerhalb_ des C++-Codes (abhängig von einigen statischen
Bedingungen) Pfade für nachfolgende Includefiles und für vom Linker
einzubindende Libraries zu setzen?
b) Wenn das - wie ich fürchte - nicht normiert ist, gibt es dann
wenigstens einen Weg, der "weitgehend" portabel funktioniert? (VC++
2005 unter Windows wäre Pflicht, andere Umgebungen sollten aber
weitgehend transparent mitunterstützt werden.)
Jens
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Fri May 12, 2006 9:00 pm Post subject: Re: Compiler-/Linkerpfade portabel setzen? |
|
|
Jens Lenge wrote:
| Quote: | a) gibt es einen standardisierten Weg (Präprozessoranweisungen o.
ä.), _innerhalb_ des C++-Codes (abhängig von einigen statischen
Bedingungen) Pfade für nachfolgende Includefiles und für vom Linker
einzubindende Libraries zu setzen?
|
Für Includefiles könntest du höchstens sowas wie
#if CONDITION1
# define INCLUDEPATH include1
#else
# define INCLUDEPATH include2
#endif
#define INCLUDE2(x) #x
#define INCLUDE1(x) INCLUDE2(x)
#define INCLUDE(x) INCLUDE1(INCLUDEPATH/x)
und dann
#include INCLUDE(foo.h)
bauen (mir ist nicht ganz klar, wozu man INCLUDE2 braucht, sollte der
Preprozessor das nicht schon in INCLUDE1 richtig expandiert haben?).
| Quote: | b) Wenn das - wie ich fürchte - nicht normiert ist, gibt es dann
wenigstens einen Weg, der "weitgehend" portabel funktioniert? (VC++
2005 unter Windows wäre Pflicht, andere Umgebungen sollten aber
weitgehend transparent mitunterstützt werden.)
|
Für Libraries gibt es m.W. bei einigen Compilern #pragmas; da ich sowas
aber nicht benutze, weiß ich keine Details.
Unter Unix würde man sowas vermutlich mit autoconf lösen. Für das
Projekt, an dem ich beruflich arbeite, habe ich mit dem Windows
Scripting Host ein kleines Javascript-Programm geschrieben, das diese
Aufgabe übernimmt (Pfade in Makefiles und Projektdateien anpassen,
Konfiguration validieren).
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Mon May 15, 2006 2:22 pm Post subject: Re: Compiler-/Linkerpfade portabel setzen? |
|
|
Stefan Reuther wrote:
| Quote: | Jens Lenge wrote:
a) gibt es einen standardisierten Weg (Präprozessoranweisungen o.
ä.), _innerhalb_ des C++-Codes (abhängig von einigen statischen
Bedingungen) Pfade für nachfolgende Includefiles und für vom Linker
einzubindende Libraries zu setzen?
Für Includefiles könntest du höchstens sowas wie
#if CONDITION1
# define INCLUDEPATH include1
#else
# define INCLUDEPATH include2
#endif
#define INCLUDE2(x) #x
#define INCLUDE1(x) INCLUDE2(x)
#define INCLUDE(x) INCLUDE1(INCLUDEPATH/x)
und dann
#include INCLUDE(foo.h)
bauen (mir ist nicht ganz klar, wozu man INCLUDE2 braucht, sollte der
Preprozessor das nicht schon in INCLUDE1 richtig expandiert haben?).
|
Bei »#include INCLUDE(foo.h)« ist der Parameter zu INCLUDE1
zuerst »INCLUDEPATH/foo.h«. Laut Norm, »If, in the replacement
list, a parameter is immediately preceded by a # preprocessing
token, both are replaced by a single character string literal
preprocessing toke that contains the spelling of the
preprocessing token sequence for the corresponding argument.«
Ziel ist, glaube ich, dass man assert mehr oder weniger:
#define assert(c) ((c) || __assert( __FILE__, __LINE__, # c))
definieren kann, und bei z.B. »assert( p != NULL )«, die Kette
»p != NULL« (und nicht »p != __nullptr« oder »p != 0«) in der
Ausgabe bekommen.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|