C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Compiler-/Linkerpfade portabel setzen?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Jens Lenge
Guest





PostPosted: Wed May 10, 2006 9:09 pm    Post subject: Compiler-/Linkerpfade portabel setzen? Reply with quote



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





PostPosted: Fri May 12, 2006 9:00 pm    Post subject: Re: Compiler-/Linkerpfade portabel setzen? Reply with quote



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





PostPosted: Mon May 15, 2006 2:22 pm    Post subject: Re: Compiler-/Linkerpfade portabel setzen? Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.