Come faccio a compilare il mio software per tutte le piattaforme da Ubuntu Linux a 64 bit?

3

Scrivo un sacco di software open source che renderò disponibile sul mio sito web. Come posso ottenere il mio software compilato per tutte le piattaforme rilevanti, tra cui:

  • di Windows
  • OS X
  • Linux a 32 bit deb
  • Linux 64 bit deb
  • Linux a 32 bit rpm
  • Linux 64 bit rpm
  • etc

Al momento ho solo Linux 64 bit box, quindi posso compilare da solo il deb bit e il debug a 64 bit. Sto facendo affidamento sugli utenti che contribuiscono con altre versioni. Questo non è l'ideale perché le versioni non sono tutte disponibili subito dopo una nuova versione. A dire il vero, il binario di Windows è a questo punto parecchie versioni.

Modifica : il mio software è QQWing . È scritto in C ++. Mi piacerebbe avere un sistema di compilazione in grado di generare binari per tutte le piattaforme o avere un posto dove eseguire build per più sistemi.

    
posta Stephen Ostermiller 29.09.2014 - 15:15
fonte

3 risposte

7

Qualsiasi organizzazione professionale non avrebbe semplicemente creato macchine ma ambienti di test per tutte quelle piattaforme che supportava.

Ed è per questo che la maggior parte delle organizzazioni professionali non supporterà una tale pletora di piattaforme, è semplicemente troppo costoso per il piccolo ritorno che ognuno di loro produce tranne i pochi grandi come Windows, Mac e RedHat basati su Linux.
< br> Quindi dovrete ottenere l'hardware per eseguire tutti quei sistemi operativi, i compilatori e altri strumenti per tutti. O forse puoi farla franca eseguendo tutti quei sistemi operativi in macchine virtuali, se il tuo hardware è all'altezza del compito.

    
risposta data 29.09.2014 - 16:28
fonte
2

Una parte dello sviluppo del software è la gestione della complessità. Specificando più target di output, si aggiungono complessità. Chiedere che "deve essere un modo più semplice" in questo caso è un po 'come l'episodio dei Simpson in cui la signora chiede "metti tutti i generi alimentari in una borsa e non rendi più pesante!".

Se hai complessità, a volte è meglio gestirlo correttamente, piuttosto che provare a ridurlo.

Una soluzione potrebbe essere utilizzare Vagrant per definire una specifica di macchina virtuale per ciascuna delle piattaforme di destinazione. Ciò include OS, compilatore e qualsiasi altro strumento richiesto.

Quindi, usa uno strumento di costruzione come Jenkins, TeamCity, Bamboo, ecc. per creare piani di costruzione per ciascuna delle tue piattaforme. Collega questi piani di generazione al tuo repository di origine (questo è CI di base, ed eseguirli tutti quando si verificano cambiamenti.

Ora non hai solo il supporto multipiattaforma, ma hai un processo di compilazione che funziona entrambi, ed è auto-documentante. In questo modo, non hai il problema in cui trascorri un po 'di tempo a configurare una macchina reale da costruire su Windows, poi quando il disco rigido fallisce sei mesi dopo, hai dimenticato come hai funzionato tutto e devi ricomincia.

    
risposta data 29.09.2014 - 18:55
fonte
1

GCC è in grado di compilare sia a 32-bit che a 64-bit sulle stesse macchine usando i flag -m32 e -m64 , rispettivamente ( fonte ). Ovviamente, il tuo codice dovrebbe anche essere testato per assicurarti che non ci siano errori introdotti tra 32 e 64 bit.

Puoi cross-compilare il tuo codice in un eseguibile di Windows usando le librerie Wine. Le librerie mingw forniscono compilatori che agiscono in modo simile a gcc, emettendo in uscita un binario compatibile con Windows (tecnicamente compatibile con Wine). Potresti avere un comando come i586-mingw32msvc-gcc -Wall "main.c" -o "Program.exe" per compilare il tuo programma ( source ). Le sono differenze tra Wine e Windows, quindi potrebbero esserci bug sottili e inattesi nell'usare questo metodo. Ancora una volta, i test approfonditi sono fondamentali.

Puoi vedere le risposte su questa domanda SO per suggerimenti su come compilare per Mac.

Dichiarazione di non responsabilità: Non ho mai usato nessuno di questi in una capacità di produzione, quindi YMMV.

    
risposta data 29.09.2014 - 18:05
fonte

Leggi altre domande sui tag