2012-02-07 10 views
13

È possibile sviluppare C/C++ su Windows utilizzando Visual Studio 2010 (non necessariamente il compilatore MSVC) e ottenere un file binario che posso caricare su una macchina Linux (ed eseguirlo) ?Come compilare in Visual Studio 2010 per Linux

Sulla possibilità, ho controllato di utilizzare MinGW o qualcosa di simile per ottenere i binari di Windows facendo la stessa cosa che farebbero i binari di Linux ma ho avuto problemi a ottenere tutti i win-ports per tutte le librerie necessarie (posix).

EDIT: Non voglio far funzionare Windows su Linux. Ho bisogno di un binario linux nativo come risultato.

+2

Sì, è possibile. Devi solo trovare (o scrivere te stesso) attività di compilazione personalizzate per chiamare il tuo cross-compilatore. Inoltre, devi trovare (o costruirti) un cross-compiler. Nessuno di questi passaggi è particolarmente facile da fare da soli, ma se hai la pazienza di eseguirli, sono abbastanza fattibili (ho fatto entrambe le cose, ci sono volute un paio di settimane, in totale). Se stai costruendo software per Linux, però, sarebbe molto più facile compilarlo su Linux. –

+0

Quali caratteristiche dell'IDE ci si aspetterebbe di utilizzare, oltre all'editor e alla possibilità di eseguire il shelling ed eseguire 'make'? –

+0

@James: quale cross-compilatore suggeriresti? – schoetbi

risposta

15

Grazie a tutti voi! La mia soluzione è riassunto:

  1. codice indipendente dalla piattaforma è stato sviluppato utilizzando Visual Studio
  2. build finale (per Linux) viene eseguita utilizzando un Virtual Box in esecuzione Debian o RHEL
  3. IDE all'interno del Virtual Box è Eclipse con il plugin CDT
  4. Usa CMake per generare i file di progetto sia per Visual Studio ed Eclipse CMake
+0

Ciao. Probabilmente, l'argomento è vecchio, ma posso chiederti di inserire maggiori dettagli sulla tua soluzione, per favore? Ad esempio, ciò che è "il codice indipendente dalla piattaforma è sviluppato". Probabilmente ho lo stesso problema adesso come te 4 anni fa. Spero che anche il cambiamento tecnologico abbia cambiato qualcosa nel tuo flusso di lavoro. Sogno di utilizzare un codice base per piattaforme diverse. – Michail

+0

Ciò che significa in sostanza è che hai bisogno di un OS-Abstraction Layer. È possibile utilizzare uno esistente o incapsulare ogni sistema operativo, chiamata necessaria in una funzione wrapper. Forse stai cercando [POCO C++] (http://pocoproject.org/) – schoetbi

0

No, non penso che sia possibile eseguire la cross-compilazione di Linux/x86 con un compilatore di Visual Studio.

(non so di Windows, ma ho sentito che Microsoft non è molto amichevole verso Linux e non si sviluppa cross-compilatori)

Il modo più semplice per voi per compilare il codice per Linux/x86 è installare una distribuzione Linux completa (sul tuo laptop, o forse in una macchina virtuale).

Si potrebbe forse compilare (per host Windows) GCC e binutils per ottenere un cross-compiler rivolto a Linux/x86 e in esecuzione su Windows, ma non lo consiglierò a un principiante.

(Se hai un intero team che conosce solo Windows, devi spendere risorse per far sì che il team apprenda Linux, e questo è più facile se ogni sviluppatore ha un sistema Linux sul suo desktop. e ha un costo, e gran parte degli sforzi saranno spesi nell'apprendimento della programmazione sotto Linux, ad esempio chiamate di sistema Linux e API e librerie comuni, quindi mantenere Visual non vincerà molto e ti costerà!)

+0

Come ho già detto, non è necessario utilizzare MSVC. C'è un progetto che allrady è riuscito ad ottenere una tale cross-toolchain? – schoetbi

+1

Non uso Windows, quindi non sono la persona migliore da chiedere. Tuttavia, non ho mai sentito di una cross-toolchain ampiamente distribuita in forma binaria pacchettizzata per Windows. ** Ti consiglio caldamente di installare Linux ** sul tuo computer (puoi installarlo su una partizione del disco separata), che coesisterà con Windows, e sceglierai all'avvio quale sistema operativo, o in un macchina virtuale). –

3

ho alcune opinioni su questo, ma è difficile da pesare in, senza ulteriori informazioni. Perché vuoi svilupparlo in Visual Studio? Che tipo di applicazione stai prendendo di mira? Esiste un livello di maturità del codice che esiste già? Ci sono problemi di esperienza di squadra che influenzano questa decisione?

La mia reazione istintiva è che sembra che si desideri i vantaggi dell'ambiente di sviluppo VS 2010 in termini di produttività degli sviluppatori durante lo sviluppo di un'applicazione da utilizzare in un ambiente Linux. Se mi trovassi di fronte a questo, probabilmente userò il C# portatile usando mono su un server di integrazione costante basato su Linux con check-in a breve termine (una volta ogni ora dovrebbe andare bene) al fine di eliminare il codice non portatile . Comunque hai specificato C++, quindi probabilmente non è la soluzione perfetta per te, supponendo che sia un requisito.

Con C++ come un requisito fondamentale e Visual Studio come un requisito indispensabile, il piano che hai pubblicato sembra buono.Inoltre, desidero decisamente un server di integrazione costante in esecuzione sulla piattaforma di destinazione con check-in a breve termine per impedire lo sviluppo di codice significativo di codice non portatile. TFS può gestirlo se si dispone di licenze MSDN (e fornisce l'integrazione degli strumenti sia in Visual Studio che in Eclipse). Ci sono molte altre buone opzioni, ma sembra che tu sia attratto dallo stack Microsoft.

+0

+1 per questo. Il fatto è che vogliamo sviluppare un'applicazione in tempo reale (ecco perché C# non è un'opzione). TFS non è necessario poiché utilizziamo SVN/Jenkins con repository git locali per ogni sviluppatore. Il test di integrazione è sempre buono. Jenkins può anche attivare una macchina virtuale per testare il software su ad esempio: la piattaforma linux. Grazie. – schoetbi

+0

La tua piattaforma target è Redhawk? Sta iniziando a sembrare il mio lavoro di un giorno. Quando dico un'integrazione costante, voglio dire che gli sviluppatori fanno piccole modifiche e verificano circa un'ora (o più spesso) e fanno in modo che il check-in faccia partire una compilazione automatica completa del prodotto, notificando immediatamente il dev se tale build fallisce. Non ho familiarità con Jenkins, forse questo fornisce questa capacità. Preferibilmente ogni codice è preceduto da un caso di test, ma è fuori tema. – PatrickV

+0

No, non conosco Redhawk. CI: Questo è esattamente ciò che Jenkins può fare per te. http://jenkins-ci.org/ – schoetbi