2013-06-10 20 views
6

Pracuję nad oprogramowaniem w C++ na Windowsie 32-bitowym (przy użyciu MSVC++), ale ponieważ chcę mieć możliwość korzystania z mojego oprogramowania na każdej platformie, postanowiłem użyć CMake jako mój generator budowania.Wieloplatformowa kompilacja pod Windows skierowana do Linuksa przy użyciu CMake

Dlatego nadal jestem dopiero początkującym użytkownikiem CMake. Z samouczków CMake rozumiem, że aby przekroczyć kody kompilacji, najpierw należy zainstalować platformę narzędziową symulującą platformę docelową na platformie hosta. Następnie za pomocą odpowiednich kompilatorów C i C++ na platformie docelowej dostarczonych przez to narzędzie, program CMake będzie w stanie generować pliki makefile itp.

Teraz chcę zbudować mój kod dla platformy Linux (GNU/Linux) na platformie Win32. Próbowałem wykonać powyższą procedurę używając CMake połączonego z Cygwin i używając gcc i g ++ jako kompilatorów. Zbudował dobrze, stworzył pliki makefile, a kiedy wydałem "make" w terminalu Cygwin, wygenerowane pliki makefile zostały "wykonane". Teraz mam plik wykonywalny, który, mam nadzieję, działał na platformie Linux. Ale na Linuksie pojawia się błąd: bash nie może wykonać pliku binarnego.

Używając pliku komendy nazwa_programu, zdałem sobie sprawę, że plik wykonywalny wykonywany przez powyższą procedurę jest typu PE32, który jest tylko dla systemu Windows.

Teraz moje pytanie brzmi: czy moje rozumienie procedury budowania wielu platform przy użyciu cmake jest poprawne? A może powinienem użyć innego zestawu narzędzi Linux pod Windowsem, aby uzyskać plik wykonywalny Linux ELF? Jakie narzędzia przychodzą ci na myśl, które dadzą mi to, czego chcę?

Dziękujemy

Setareh

+0

Nie wiem o cmake, ale qmake ma "profile kompilacji" dla różnych platform. Być może powinieneś wyszukać opcję "docelowej platformy" w dokumentach cmake lub coś w tym stylu. –

+1

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

+0

[Przykładowa lista mkspecs dla qmake na moim komputerze] (http://pastebin.com/raw.php ? i = 3mMjgC9p) –

Odpowiedz

4

Będziesz chciał przejrzeć: http://www.cmake.org/Wiki/CMake_Cross_Compiling, jeśli wykonujesz krzyżowanie kompilacji. Sugerowałbym jednak, aby zainstalować maszynę wirtualną Linux jak wirtualne pudełko na komputerze z Windows i budować naiwnie na Linuksie. Kompiluje się znacznie szybciej i nie musisz się martwić kompilacją krzyżową. Możesz zamontować dysk Windows z maszyny wirtualnej Linux, aby móc współużytkować to samo drzewo źródłowe. VM linuksa będzie się kompilował znacznie szybciej niż gcc działający pod oknami.

+0

Wielkie dzięki za odpowiedź. Teraz rozumiem moje opcje. – Setareh

0

Zrozumienie CMake jest poprawne ... to będzie ustalić, jak stworzyć system gromadzenia ty życzenie (lub jest domyślny dla platformy Jesteś aktualnie na) na podstawie przepisów w pliku CMakeLists.txt. Jednak niekoniecznie pomoże to w kompilacji linuksa na komputerze z systemem Windows, jeśli nie masz zainstalowanego czegoś, co może być skierowane na Linuksa.

Aby skompilować linux kierowania, musisz użyć kompilatora Linux. link posted by @stjin informuje, jak zainstalować go na cygwin. Następnie, aby skonfigurować swój build CUpewnij to zrobić w terminalu:

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

to powie CMake zlokalizować specjalny linux kierowane kompilatorów. Mam nadzieję, że po kompilacji z tymi kompilatorami będzie można uruchomić na Linuksie.

+0

@Stjin and SethMMorton, Dziękujemy za komentarze i link. Ale strona metamod najwyraźniej zmieniła swoją dystrybucję binarną, teraz mam tylko plik metamod.dll z tego miejsca i nie mam pojęcia, jak mogę zainstalować kompilatory krzyżowe Linuksa w Cygwin. Jakieś pomysły? – Setareh