2010-01-07 152 views
6

我正在開發一個應用程序,它必須在Windows和Linux上運行。在Windows和Linux上交叉編譯

到目前爲止,我已經在Linux上運行GCC 4.4.1使用我的Makefile。

但是,我也需要在Windows上編譯。源代碼將在Windows上編譯,因爲我已經#defined定義了分隔不同編譯器的所有代碼區域。即:

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

到目前爲止代碼很簡單,因爲我剛開始這個程序。基本上我只想測試我的想法。

但是,它和編譯Linux上的源代碼一樣簡單嗎?

然後,當我想編譯到Windows時,我可以將文件複製到Windows平臺。然後打開Visual Studio C++中的源代碼文件並創建一個項目,然後編譯創建我的二進制文件?

回答

3

Using Visual C++是在Windows上構建C項目的一種方法。不過,這不是唯一的方法。

VC有項目文件,你需要創建。但後來認識到你必須在兩個不同的地方維護構建配置(使& .vcproj)。

還有其他的選擇,以及:

  • 您也可以在Windows上使用make(例如,在Cygwin
  • nmakemsbuild
  • 你也使用ant(這將在兩個平臺上工作)。

如果我是你,我會嘗試使用盡可能少的不同的構建工具。

3

看看CMake吧。

0

是的。就這麼簡單。請記住,您需要將全部操作系統特定的東西包含在#ifdef s中。

2

SCons是一個優秀的跨平臺構建系統。您不用編寫Makefile,而是編寫一個SConstruct文件,該文件通常更簡單但功能更強大。 scons命令將(默認情況下)爲其所運行的操作系統構建,提供了一種管理跨平臺構建的簡單方法。

1

CMake可以幫助您保持您的構建可移植到多個工具鏈中。但是,您仍然需要處理語言和圖書館級別之間的不兼容問題。

這就是爲什麼我建議在所有平臺上使用GCC,autotools等。在Windows上,GNU工具鏈被稱爲MinGW/MSys。以MSysGit爲例。

2

對於簡單的控制檯應用程序(甚至更復雜的應用程序,如Qt框架),您可以使用MinGW在Windows上構建。使用MinGW進行構建與在Linux上構建非常相似,並且不可能只使用相同的而不進行小修改。這樣做的主要優點是您不需要維護兩組Makefile /項目文件。

您還可以使用Cygwin,它基本上是Linux API的仿真層的實質功能。然而,使用Cygwin的缺點是它鏈接到它自己的庫cygwin1.dll。這對你來說可能不是問題,因爲你可以簡單地將這個DLL與你的程序一起發佈。您也可以使用選項-mno-cygwin作爲gcc/g++的編譯器選項來禁止使用此選項。但是,對於某些功能,需要cygwin1.dll功能。

我可以推薦MinGW在Windows上編譯最初爲Linux編寫的程序。我正在使用它來執行各種命令行程序,對於GUI應用程序,我使用了帶有MinGW編譯器的Qt framework。如果你想構建GUI應用程序,你應該使用獨立於平臺的GUI框架,因爲它使事情變得更容易。

1

您也許可以使用MinGW直接從Linux交叉編譯Windows二進制文件。大多數流行的Linux發行版現在都提供了MinGW軟件包,這使得它非常簡單。

然後,您可以在一臺機器上一次性從一個Makefile構建所有Windows和Linux二進制文件。不需要爲了讓GNU Make在Windows中正常工作而煩惱,更不用說擔心Visual Studio了。