Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
gcc: Operating-System-Define?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Elmi
Gast





BeitragVerfasst am: 02. Apr 2006 16:49   Titel: gcc: Operating-System-Define?

Hi,

hat der gcc eigentlich ein fest eingebautes define a la "_LINUX", an dem man im Code festmachen kann, auf welchem OS man sich gerade befindet?
 

klopskuchen
prolinux-forum-admin


Anmeldungsdatum: 26.06.2004
Beiträge: 1444

BeitragVerfasst am: 02. Apr 2006 18:50   Titel:

Code:
#ifdef LINUX
[...]
#endif


user@host# gcc [...] -D"LINUX"


MfG, Klopskuchen
_________________
When all else fails, read the instructions .
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Elmi
Gast





BeitragVerfasst am: 03. Apr 2006 10:12   Titel:

Naja, wenn ich die Option dem gcc per Kommandozeile mitgebe, ist das ja eher kein fest eingebautes define...ich suche aber einen Weg, um innerhalb von portablem Code das OS zu ermitteln, eben ohne dass der User da irgend welche Makefiles anpassen muss um ein -DLINUX zu setzen...
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 03. Apr 2006 12:01   Titel:

Elmi hat folgendes geschrieben::
Naja, wenn ich die Option dem gcc per Kommandozeile mitgebe, ist das ja eher kein fest eingebautes define...ich suche aber einen Weg, um innerhalb von portablem Code das OS zu ermitteln, eben ohne dass der User da irgend welche Makefiles anpassen muss um ein -DLINUX zu setzen...

Und was ist mit dem allgemeinen Fall TARGET_OS != BUILD_OS? So wie du das machen willst, kann dein Programm nicht Cross-compiliert, d.h. beispielsweise auf einer i386-Maschine für amd64 oder xScale (so bräuchte ich das beispielsweise), werden. Das ist also Mist.


Stattdessen nimmt man am besten die autotools. Da wird dann jeweils beim ./configure durch Beispielcode getestet, wie die Spezifikation der jeweiligen Funktion im Target-OS umgesetzt wurde. Wenn du die autotools nicht benutzen willst, mach die Target-Plattform irgendwie anders selektierbar, z.B. über ein selbstgemachtes ./configure-Skript.

Janka
 
Benutzer-Profile anzeigen Private Nachricht senden

Elmi
Gast





BeitragVerfasst am: 03. Apr 2006 13:33   Titel:

Hm Ok, aber die autotools müssen das doch auch irgend wie in ein Define umwandeln, oder? Ich denke damit kann ich ja wohl kaum meinen Code an den entsprechenden Positionen verändern lassen?
 

klopskuchen
prolinux-forum-admin


Anmeldungsdatum: 26.06.2004
Beiträge: 1444

BeitragVerfasst am: 03. Apr 2006 22:31   Titel:

Elmi hat folgendes geschrieben::
Ich denke damit kann ich ja wohl kaum meinen Code an den entsprechenden Positionen verändern lassen?

Weshalb verändern lassen? Richtig schreiben.

Code:
{
/* immer kompilieren */
func_independent();

/* hier wirds plattformabhängig */
#ifdef OS1 {
        func_os1();
        [...]
 }
#elif OS2 {
        func_os2();
        [...]
 }
# endif


Der Compiler ist dazu da, deinen Quellcode zu assemblieren. Freundlicherweise ruft der gcc per default sogar den Linker auf. Programmieren mußt du aber selbst.


MfG, Klopskuchen
_________________
When all else fails, read the instructions .
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Elmi
Gast





BeitragVerfasst am: 04. Apr 2006 6:55   Titel:

Drücke ich mich so unverständlich aus oder warum sonst drehen wir uns hier im Kreis?

Das mit den defines ist mir klar - nur wie bekomme ich heraus, auf welcher Plattform der Code gerade compiliert wird? DAS ist meine (Ursprungs)frage, und die ist bis heute ungeklärt.

Es ist mir im prinzip ja herzlich egal, ob der gcc ein Plattform-Define mitbringt oder ob das von irgend welchen autotools gemacht wird, aber ich würde gerne wissen, wie man sowas realisiert und welche Defines es da möglicherweise schon voreingestellt gibt.

Elmi
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 04. Apr 2006 11:00   Titel:

Elmi hat folgendes geschrieben::

Das mit den defines ist mir klar - nur wie bekomme ich heraus, auf welcher Plattform der Code gerade compiliert wird? DAS ist meine (Ursprungs)frage, und die ist bis heute ungeklärt.

Es ist mir im prinzip ja herzlich egal, ob der gcc ein Plattform-Define mitbringt oder ob das von irgend welchen autotools gemacht wird, aber ich würde gerne wissen, wie man sowas realisiert und welche Defines es da möglicherweise schon voreingestellt gibt.

Damit's beim Cross-Compilieren auch klappt guckt ./configure sich z.B. gcc -dumpmachine an. Das hättest du jetzt aber auch durch man gcc herausfinden können. autotools kennt aber auch andere Compiler, so dass es auch dort das Target richtig bestimmen kann.

Daraus wird dann im Makefile ein CFLAGS=-DPLATFORM=LINUX gemacht. Schon hast du ein Define, mit dem du die Plattform feststellen kannst.

Was autotools aber auch macht ist, feingliederige Defines der Form SIGNAL_SEMANTICS=SYSV bereitzustellen. Da muss man dann nicht jedes Detail der Plattform selbstzuordnen, sondern kann die mitgelieferten m4-Skripte benutzen, die bei ./configure die Headerfiles des Target-Systems scannen, um solche Feinheiten automatisch herauszufinden.

Janka
 
Benutzer-Profile anzeigen Private Nachricht senden

Elmi
Gast





BeitragVerfasst am: 04. Apr 2006 11:21   Titel:

Janka hat folgendes geschrieben::
Daraus wird dann im Makefile ein CFLAGS=-DPLATFORM=LINUX gemacht.


Das heißt die Antwort auf meine Frage lautet schlichtweg "LINUX". Lang war die Geburt, aber nun hats ja doch noch geklappt...thx!
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 04. Apr 2006 11:55   Titel:

Elmi hat folgendes geschrieben::
Janka hat folgendes geschrieben::
Daraus wird dann im Makefile ein CFLAGS=-DPLATFORM=LINUX gemacht.


Das heißt die Antwort auf meine Frage lautet schlichtweg "LINUX". Lang war die Geburt, aber nun hats ja doch noch geklappt...thx!


NEIN! Das ist nicht die Antwort. Das oben war nur ein Beispiel, wie man es selbst machen muss!

Janka
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy