Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 15. Dez 2018 15:28

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: gcc: Operating-System-Define?
BeitragVerfasst: 02. Apr 2006 16:49 
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 02. Apr 2006 18:50 
Offline
prolinux-forum-admin

Registriert: 26. Jun 2004 21:18
Beiträge: 1444
Code:
#ifdef LINUX
[...]
#endif
user@host# gcc [...] -D"LINUX"


MfG, Klopskuchen

_________________
When all else fails, read the instructions .


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Apr 2006 10:12 
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...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Apr 2006 12:01 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Apr 2006 13:33 
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03. Apr 2006 22:31 
Offline
prolinux-forum-admin

Registriert: 26. Jun 2004 21:18
Beiträge: 1444
Zitat:
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 .


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 04. Apr 2006 6:55 
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 04. Apr 2006 11:00 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 04. Apr 2006 11:21 
Zitat:
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!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 04. Apr 2006 11:55 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
Zitat:
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


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de