2010-01-07 19 views
6

Ich entwickle eine Anwendung, die auf Windows und Linux ausgeführt werden muss.Cross-kompilieren unter Windows und Linux

Bisher habe ich es unter Linux mit GCC 4.4.1 mit meinem Makefile ausgeführt.

Allerdings muss ich auch auf Windows kompilieren. Der Quellcode wird unter Windows kompiliert, da ich alle Bereiche des Codes definiert habe, die die verschiedenen Compiler trennen. Ie .:

#ifdefined (LINUX) 
/* Do linux stuff */ 
#else 
/* Do windows stuff */ 
#endif 

Und bis jetzt ist der Code sehr einfach, da ich gerade dieses Programm beginne. Im Grunde will ich nur meine Idee testen.

Ist es jedoch so einfach wie das Kompilieren des Quellcodes unter Linux?

Wenn ich dann auf Windows kompilieren möchte, könnte ich die Dateien auf die Windows-Plattform kopieren. Öffnen Sie dann die Quellcodedateien in Visual Studio C++ und erstellen Sie ein Projekt und kompilieren Sie dann, um meine Binärdatei zu erstellen.

Antwort

3

Using Visual C++ ist eine Möglichkeit, Ihr C-Projekt unter Windows zu erstellen. Es ist jedoch nicht der einzige Weg.

VC hat Projektdateien, die Sie erstellen müssen. Aber dann merke, dass du die Build-Konfiguration an zwei verschiedenen Orten verwalten musst (make & .vcproj).

Es gibt andere Optionen, wie gut:

  • Sie auch nmakemake unter Windows (zB auf Cygwin)
  • Es gibt verwenden können, msbuild usw.
  • Sie auch ant nutzen könnten (was arbeiten auf beiden Plattformen).

Wenn ich Sie wäre, würde ich versuchen, so wenig verschiedene Build-Tools wie möglich zu verwenden.

3

Werfen Sie einen Blick auf CMake.

0

Ja. So einfach ist das. Denken Sie nur an die ganze Zeit, die Sie alle OS-spezifischen Sachen in #ifdef s beifügen müssen.

2

SCons ist ein ausgezeichnetes Cross-Plattform-Build-System. Anstatt eine Makefile zu schreiben, schreiben Sie eine SConstruct Datei, die normalerweise einfacher und doch leistungsfähiger ist. Der Befehl scons wird (standardmäßig) für das Betriebssystem erstellt, auf dem er ausgeführt wird. Auf diese Weise können plattformübergreifende Builds auf einfache Weise verwaltet werden.

1

CMake kann Ihnen helfen, Ihren Build über mehrere Toolchains hinweg tragbar zu halten. Allerdings müssen Sie sich immer noch mit den Inkompatibilitäten zwischen den Sprachen und der Bibliothek auseinandersetzen.

Deshalb empfehle ich GCC, die Autotools usw. auf allen Plattformen zu verwenden. Unter Windows heißt die GNU-Toolchain MinGW/MSys. In MSysGit finden Sie ein Beispiel.

2

Für einfache Konsolenanwendungen (und sogar komplexere, wie das Qt-Framework) können Sie unter Verwendung von MinGW auf Windows aufbauen.Bauen mit MinGW ist dem Aufbau auf Linux sehr ähnlich und es ist nicht unwahrscheinlich, dass Sie Makefile ohne oder nur mit geringfügigen Änderungen verwenden können. Dies hat den großen Vorteil, dass Sie nicht zwei Makefiles/Projektdateien pflegen müssen.

Sie können auch Cygwin verwenden, die im Grunde eine Emulationsebene der Linux-API für die wesentliche Funktionalität ist. Die Verwendung von Cygwin hat jedoch den Nachteil, dass es auf eine eigene Bibliothek cygwin1.dll verweist. Dies ist möglicherweise kein Problem für Sie, da Sie diese DLL einfach mit Ihrem Programm versenden können. Sie können auch unterdrücken, indem Sie die Option -mno-cygwin als Compileroption für gcc/g++ verwenden. Für einige Funktionen ist jedoch die Funktionalität cygwin1.dll erforderlich.

Ich kann MinGW zum Erstellen von Programmen unter Windows, die ursprünglich für Linux geschrieben wurden, empfehlen. Ich benutze dies für verschiedene Befehlszeilenprogramme, und für GUI-Anwendungen verwende ich die Qt framework mit dem MinGW-Compiler. Wenn Sie GUI-Anwendungen erstellen möchten, sollten Sie auf jeden Fall ein plattformunabhängiges GUI-Framework verwenden, da dies die Arbeit wesentlich erleichtert.

1

Sie können MinGW möglicherweise verwenden, um Windows-Binärdateien direkt unter Linux zu kompilieren. Die meisten der beliebten Linux-Distributionen haben jetzt MinGW-Pakete zur Verfügung, die dies sehr einfach machen.

Dann können Sie alle Ihre Windows- und Linux-Binärdateien auf einmal von einem Makefile aus erstellen. Kein Grund herumzupfuschen, GNU Make zu versuchen, in Windows richtig zu funktionieren, geschweige denn, sich um Visual Studio zu sorgen.

Verwandte Themen