Come sono progettati progetti crossplatform / multiple-OS C ++ in termini di codice e strumenti?

4

Voglio creare un progetto in C ++ che possa funzionare in Windows, Linux ed Embedded Linux.

Come vengono creati i progetti quando devono lavorare su molti SO? Viene prima creato su un SO e quindi il codice viene lentamente modificato per essere trasferito su un altro sistema operativo? Ad esempio: per me, la versione Linux di Firefox sembra essere creata come un progetto Windows e un progetto Linux separato con una diversa base di codice, dato che Firefox si comporta in modo leggermente diverso in Windows e Linux. Sebbene il download del codice sorgente sia sorprendentemente un singolo link.

Se QT viene utilizzato per l'interfaccia utente, i thread Boost per il threading, il Build Bot per CI e NetBeans / Eclipse / QT Creator per un IDE, una persona sarà in grado di minimizzare la quantità di riscrittura del codice richiesta per portare il progetto su un altro sistema operativo? È questo il modo giusto per farlo, o questi progetti devono essere creati come due progetti completamente separati per due OS distinti?

    
posta Nav 30.09.2012 - 17:58
fonte

1 risposta

3

La chiave è di isolare parti non portabili del codice dalla base del codice principale.

Ad esempio, la struttura della directory potrebbe includere una directory chiamata shared/ che includerebbe quindi tutti i codici e i contenuti portatili e condivisi . Quindi qualsiasi codice non portatile si troverà in directory specifiche che raggruppano il comportamento. Ad esempio GUI/ .

Quando si tratta di codice reale, è possibile eseguire più implementazioni e utilizzare la compilazione condizionale tramite file di origine separati per piattaforme separate (ad esempio GUI/Qt/Linux/<linux_specific_files> ) e quindi utilizzare alcuni sistemi di compilazione per definire il tipo di build che si desidera creare ( dì una generica build Linux con Qt o GTK, a condizione che tu abbia entrambe le implementazioni). Un altro modo sarebbe utilizzare le direttive del preprocessore per includere / escludere parti del codice al momento della compilazione. Un semplice esempio sarebbe il seguente:

#ifdef XX_LINUX_BUILD
    // Linux specific code here
#endif
#ifdef XX_WINDOWS_BUILD
    // Windows specific code here
#endif

... dove XX denota qualche identificatore univoco per il progetto per evitare collisioni. Quindi, al momento della compilazione, devi definire XX_LINUX_BUILD o XX_WINDOWS_BUILD tramite lo script build che imposta gli argomenti della riga di comando del compilatore richiesti (ad esempio -DXX_LINUX_BUILD con GCC / g ++).

    
risposta data 30.09.2012 - 18:26
fonte

Leggi altre domande sui tag