2010-07-21 17 views
11

Abbiamo un non molto complicato ma grande (vale a dire un sacco di file) Console di Visual Studio C++ Win32 scritto in standard C++ 0x in VS2010. Non usa alcun codice non standard o altro (si spera!).Port Visual Studio da C++ a Linux

Ora voglio portarlo su Linux. Qual è il modo più veloce per farlo? autoconf? vecchio stile fare il file? qualche altra soluzione?

+0

Mi sono perso qualcosa? C++ 0x è uno standard * proposto * l'ultimo che ho ascoltato e ciò significa che il tuo codice ** è ** non standard se è stato scritto utilizzando le funzionalità da questo. –

+0

in realtà C++ 0x è il nome non ufficiale del nuovo standard pianificato per il linguaggio di programmazione C++. – MBZ

+0

* previsto * rispetto a * proposto * indica eventuali differenze nello stato di ratifica? Sto solo diffidando di scrivere codice su qualsiasi cosa fino a quando non è ** lo standard **. –

risposta

7

Vorrei utilizzare la versione normale ma mantenerlo semplice con le regole predefinite il più possibile. Aggiungi dipendenze mentre vai avanti.

MODIFICA: Come nel passaggio provvisorio, crealo con mingw in modo da poter evitare l'intero problema di porting API fino a quando non si ha una build funzionante nel nuovo meccanismo di build.

Se l'app della console chiama le funzioni API win32, è possibile scegliere tra la modifica di tutta l'origine in cui viene utilizzato o la scrittura di un modulo che implementa tali funzioni.

In precedenti operazioni di porting di questo tipo l'ho provato in entrambe le direzioni e il secondo era più semplice. Ho finito per scrivere solo da 18 a 20 funzioni di shim.

E 'stato abbastanza efficace che ho finito per scrivere un livello di astrazione del sistema operativo che è stato utilizzato su molti progetti che semplicemente mi permettono di compilare su Windows nativo, cygwin, Linux, VxWorks, ecc. Con cambiamenti banali a uno o due file.

(ps Qualsiasi interesse in una versione open source di un livello di astrazione del sistema operativo basato su C++ Stavo pensando di rilasciare una versione non ingabbiata di questo al mondo se c'è interesse sufficiente.È utile soprattutto dove BOOST è troppo pesante progetti integrati.)

2

È possibile esportare un file make da Visual Studio.

Aggiornamento: In realtà non si può più, a meno che non si dispone di VC6 giro

+0

grazie. qualche tutorial, link, parola chiave? – MBZ

+0

Aggiornato come mi ero sbagliato. –

+2

Non mi frega niente di VS o C++, ma +1 per l'avatar accattivante;) –

3

Molto probabilmente non hai bisogno di autoconf (e vi consiglio di non toccarlo, unless you love pain), perché sei non cercando di essere portabile a una dozzina di gusti Unix.

  1. Rotolare manualmente i Makefile. Non dovrebbe essere troppo difficile se hai una serie di regole condivise e hai Makefile minimi che specificano solo i file sorgente e le opzioni di compilazione.
  2. Utilizzare GCC 4.5 come it supports more C++0x features.
1

STAI VIA DA AUTO * e configura. Questi sono orribili IMHO.

Se è possibile ottenere in qualche modo un VS 8 o 9 vcproj/sln, è possibile utilizzare this. Non l'ho usato, quindi non posso dare alcun consiglio.

Se si sta effettuando la conversione manuale, suggerirei qualcosa come CMake, poiché è abbastanza facile essere pronti abbastanza velocemente, anche per progetti di grandi dimensioni.

Se il progetto ha un layout semplice, si potrebbe avere successo con Qt 4 di qmake come questo:

qmake -project 

il risultato sarà un file qmake .pro, che può essere convertito in un makefile su molte piattaforme (usando qmake). Questo dovrebbe funzionare, ma non perfettamente. In alternativa, è possibile installare il plug-in Qt per VS e lasciare che generi il file pro da un progetto VS esistente. Farà in modo che il tuo sistema di compilazione dipenda dal qmake di Qt4, che probabilmente non è quello che vuoi.

Ci sono naturalmente altre cose come cmake, ma richiedono tutte un intervento manuale.

1

Il modo più veloce per farlo?

g++ *.cpp -o myapp 

Seriamente, a seconda delle esigenze, anche la generazione di un makefile potrebbe essere eccessivo. Se ti interessa solo un po 'di fretta e di sporco "vediamo se possiamo avere un programma funzionante su Linux", butta i tuoi file di codice su g ++ e vedi cosa succede.