2013-06-10 14 views
6

Sto sviluppando un software in C++ su Windows 32-bit (usando MSVC++), ma poiché voglio poter usare il mio software su ogni piattaforma, ho deciso di usare CMake come il mio generatore di build.Creazione multipiattaforma sotto Windows targeting per Linux usando CMake

Pertanto, sono ancora solo un principiante in CMake. Dai tutorial di CMake, comprendo che per poter incrociare i codici di compilazione, in primo luogo sulla piattaforma host deve essere installata una toolchain che simula la piattaforma di destinazione. Quindi utilizzando i compilatori C e C++ della piattaforma di destinazione forniti da questa toolchain, CMake sarebbe in grado di generare makefile ecc.

Ora, voglio creare il mio codice per la piattaforma Linux (GNU/Linux) su una piattaforma Win32. Ho provato a fare la procedura sopra usando CMake combinato con Cygwin e usando gcc e g ++ come compilatori. Ha creato dei makefile fini e creati e quando ho creato "make" nel terminale Cygwin, i makefile generati sono stati "fatti". Ora ho un eseguibile che speravo potesse girare sulla piattaforma Linux. Ma su Linux ottengo l'errore: bash non può eseguire file binari.

Utilizzando il file di comando executablename, mi sono reso conto che l'eseguibile creato dalla procedura precedente è di tipo PE32 che è solo per Windows.

Ora la mia domanda è: la mia comprensione della procedura di compilazione multipiattaforma usando cmake è corretta? O dovrei semplicemente usare un'altra toolchain di Linux sotto Windows per ottenere un eseguibile ELF Linux? Quali strumenti ci vengono in mente che mi darebbero quello che voglio?

Molte grazie

Setareh

+0

Non so su cmake, ma qmake ha "profili di build" per piattaforme diverse. Forse dovresti cercare l'opzione "piattaforma di destinazione" nei documenti cmake, o qualcosa del genere. –

+1

http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html – stijn

+0

[Esempio di elenco di mkspec per qmake sulla mia macchina] (http://pastebin.com/raw.php ? i = 3mMjgC9p) –

risposta

4

Se vuoi eseguire la compilazione incrociata, ti consigliamo di cercare qui: http://www.cmake.org/Wiki/CMake_Cross_Compiling. Tuttavia, ti suggerisco di installare una VM Linux come una scatola virtuale sulla tua macchina Windows e costruire ingenuamente su Linux. Si compilerà molto più velocemente e non dovrai preoccuparti della compilazione incrociata. È possibile montare il disco di Windows dalla macchina virtuale Linux in modo da poter condividere lo stesso albero dei sorgenti. La VM di linux si compilerà molto più velocemente di gcc in esecuzione in Windows.

+0

Grazie mille per la risposta. Ora capisco le mie opzioni. – Setareh

0

La vostra comprensione di CMake è corretta ... sarà determinare come creare il sistema di generazione di richiedere (o è predefinito per la piattaforma che si sta attualmente) sulla base di regole nel tuo file CMakeLists.txt. Tuttavia, questo non ti aiuterà necessariamente a compilare linux su una macchina Windows se non hai installato qualcosa che possa indirizzare linux.

Per compilare il targeting di linux, è necessario utilizzare un compilatore linux. Il link posted by @stjin ti spiega come installarne uno su cygwin. Quindi, per impostare la costruzione CMake, fare questo nel terminale:

CC=gcc-linux CXX=g++-linux cmake . [options] 

questo vi dirà CMake per individuare il linux speciale compilatori mirati. Spero che, dopo aver compilato questi compilatori, sarete in grado di eseguire su Linux.

+0

@Stjin e SethMMorton, grazie per i vostri commenti e il collegamento. Ma il sito web Metamod ha apparentemente cambiato la sua distribuzione binaria, ora ho solo un file metamod.dll da lì, e non ho idea di come posso installare i compilatori cross di Linux in Cygwin con quello. Qualche idea? – Setareh

Problemi correlati