PDA

Visualizza la versione completa : [C++] Codice cross-platform: come fare per gli header?


ciammarica
02-11-2004, 14:38
salve!
vorrei scrivere un programma in C++, che fa uso anche delle API di OpenGL.
Vorrei farlo portabile, quindi deve poter girare su Windows, Mac e Linux.
Per questo, oltre alle librerie OpenGL uso le Glut, che gestiscono la finestra e gli eventi in modo indipendente dal sistema operativo.
E fin qui ci siamo...
Ma all'inizio del programma oltre a glut.h, devo per forza includere anche windows.h, altrimenti mi da' piu' di 100 errori (giustamente).
Ma allora come fo a fare un codice portabile?
C'e' un modo per fare un controllo all'avvio del programma, in modo da vedere che sistema operativo si sta usando, e includere, in base al risultato, una header o un altro?
(per esempio, se viene rilevato Windows viene incluso windows.h, con Mac qualcos'altro e con Linux qualcos'altro ancora...)
bye! :D :dottò:

nik600
02-11-2004, 15:00
ciao

se usi C++ non puoi decidere al momento dell'esecuzione quali librerie usare...devi deciderlo al momento della compilazione

in questo caso di puoi definire delle variabili globali da usare in questo modo

#define LINUX
oppure
#define WINDOWS

e poi nei vari include

#ifdef LINUX
#include <stdio.h>
#endif

#ifdef WINDOWS
#include <windiws.h>
#endif

questo naturalmente lo puoi usare in tutte le parti di codice che prendono "una via differente" a seconda del S.O. utilizzato!

naturalmente alla fine ti basterà definire "LINUX" o "WINDOWS" a seconda del S.O. x il quale stai compilando!


:ciauz:

ciammarica
02-11-2004, 15:16
:) grazie mille!
Per caso sapresti anche come si fa per rilevare il sistema operativo che si sta usando?
le variabili LINUX e WINDOWS come devo definirle?
:confused:

xegallo
02-11-2004, 15:38
linguaggio anche nel titolo
leggi il regolamento

nik600
02-11-2004, 15:45
ehmmm

forse non mi sono spiegato!

le variabili le definisci con

#define LINUX

già fatto!

ti consiglio di fare

#define LINUX
#define WINDOWS

poi commenti quella che non ti interessa con

//#define WINDOWS

il fatto di capire quale sistema si sta utilizzando non serve ! o forse non capisco io... :master:

quando compili x linux sarai in linux (decommenti //#define LINUX)
quando compili x winzozz sarai in winzozz (decommenti //#define WINDOWS)

...ok? :ciauz:

ciammarica
02-11-2004, 15:51
:zizi: Aaaaah! agg' capit' :D
thank you

anx721
02-11-2004, 16:55
In realta se vuoi fare un programma portabile con C++ non ti devi preccupare solo se stai su linux o su windows, ma anche quale compilatore stai usando. Inoltre le macro che identificano la piatttaforma sono gia definite dal compilatore stesso, quindi fa una ricerca in modo da sapere quali sono queste macro predefinite (tipo WIN32 per windows) per usarle correttamente.

ciammarica
03-11-2004, 09:46
ok grazie!
ma se io il codice sorgente lo compilassi direttamente sul sistema in cui lo usero'?
In questo caso non dovrei preoccuparmi del compilatore, oppure si?
:bhò:

anx721
03-11-2004, 12:50
Con C++ un programma deve sempre essere compilato sul sistema su cui lo userai, cioè se va usato su windows va compilato su windows, e se va usato su linux va compilato su linux.

Se hai intenzione di poterlo distribuire su diverse piattaforme, allora devi prendere le dovute precauzioni; ovviamente puoi semplificare il tutto scegliendo un compilatore per win (visualc o mingw o borland, o altri disponibili) e un compilatore per linuz (gcc è quello in assoluto piu diffuso). In questo caso tra i requisiti richiesti dal tuo programma c'è che si usino proprio quei compilatori per compilarlo. Se tu non devi distribuire i sorgenti, ma direttamente l'eseguibile, allora questa è una buona soluzione, perkè sarai sempre tu a compilare il tuo programma con i compilatori che hai scelto.

Loading