2012-03-28 64 views
7

我們有一個針對多個移動平臺的複雜C++代碼庫。我們目前有的Windows CE(4.2〜6.5兩種原料CE和移動基礎上的),的Android(2.1以上版本),iPhone(4+),幾乎工作巴達如果發生了任何事情(2.0+)和新的C++/CX的東西,很可能會添加Windows Phone(8+)。加上Win32上的測試版本以及共享一些代碼的Win64上的服務應用程序。我們也已經嘗試在Linux上編譯單元測試,並且已經出現了問題(迄今爲止業務量太小,但可能會改變),以使其能夠在其他Linux平臺上運行。針對多個移動平臺的構建工具

我們目前使用每種平臺的本機工具編譯代碼。它們中的每一個都非常複雜,並且在其中或周圍有一些黑客來實現合理的單擊構建。對於Bada,我們還沒有解決三星調整的Eclipse之外的版本,我們必須爲此進行生產。

到目前爲止它工作正常,但越來越成爲維護問題。目前最大的問題是iPhone版本,因爲與Visual Studio項目文件和純文本文件不同,無法手動在XCode項目中添加/刪除/重命名文件,只有兩個人擁有MacOS boxen和任何XCode經驗(而每個人都有Windows和知道Visual Studio)。我們還需要爲Bada目標創建一些makefile(這是純粹的GNU工具鏈,所以任何能夠與這些應用程序進行交叉編譯的應用程序都應該這樣做),並且我不會擺脫Android構建中的一些問題:修復bug在cygwin下構建時的依賴關係處理,一些在ant構建腳本之上的黑客攻擊以及shell粘貼來按摩清單並將它們放在一起。

因此,我正在尋找關於如何統一這套不同平臺的構建過程的建議。

  • 它絕對有能力處理建設iPhone和巴達可執行文件和Android構建的本地部分(因爲沒有人有這三個平臺上分別測試)。
  • 必須處理由幾個共享庫,一個主要二進制文件,一個測試二進制文件組成的相同平臺的大型項目以及僅在某些平臺上構建的一些輔助二進制文件(當然,目前僅限於Win32)。
  • 必須能夠使用版本控制系統和一些用戶自定義變量的版本來生成構建配置頭文件和Java文件,因爲我們對不同的客戶做了18次並計算出略微不同的構建。
  • 當然,它必須自動處理依賴關係(頭文件)並且通常是可靠的。

對於其他的事情我準備砍周圍的任何不足之處,但我顯然想保持外殼膠帶量和吐到最低,因此它應該:

  • 能與Visual Studio,Eclipse和XCode集成足以讓每個環境都可以觸發構建,將構建產品上載到相應的目標並在其中附加調試器。
  • 能夠構建Java並調用Android的自定義打包工具,因此我們不必在近兩年內無償地和不兼容地改變兩次Google的ant構建腳本(舊SDK不能下載)。
  • 能夠安裝各種數據文件並隨機調用打包程序和隨機的其他腳本和工具以及其他東西,因此它不需要與太多的shell腳本混合使用。

到目前爲止,我們已經開始嘗試CMake(沒有太多的時間,所以沒有得到遠,但必須儘快做一些事情),也想過SCons。不過,我已經在幾年前嘗試過使用SCons for Windows CE進行構建,但由於它爲Visual Studio生成了makefile類型的項目,並且這些項目在VS2005中不適用於嵌入式平臺,所以我放棄了。 CMake可以生成本地makefile,但CE需要custom, bit out of date, branch。所以我想問一下是否有其他我們可能想要查看的工具,或者使用這些工具我們應該知道是否有任何已知的絆腳石。

更新:我已經找到了Android原生的二進制指令在幾個地方和pixellight甚至有cmake的腳本通過直接調用打包工具來生成APK。另外this shell script顯示它。 iPhone usage似乎記錄在這裏。

+0

看看vs安卓(http://code.google.com/p/vs-android/) – Asaf 2012-03-28 14:52:19

+0

@Asaf:謝謝,但我們仍然堅持與VS2008和現在升級似乎並不值得錢。它不會幫助我們與iPhone,因爲VS不能在MacOS上工作,我從來沒有聽說過在Windows上工作的iPhone定位編譯器。 – 2012-03-29 06:19:51

+0

現在不是mac的* nix盒子,你不會放棄使用VS編譯並使用另一個C++編譯器嗎?你可能不得不調整你的代碼以獲得更多的ansi,但無論如何,這是最好的做法。 – baash05 2012-04-17 06:10:04

回答

4

在我個人的經驗中,可以使用相同的CMake構建文件在至少Win32(VS2005),Linux(ubuntu)和OS X(10.5.8 Leopard)的平臺上生成和構建項目。在android應用程序構建過程中有多個使用CMake的項目,例如http://code.google.com/p/android-cmake/。有了這些選項,我會考慮CMake一個很好的選擇。進一步的CMake很容易上手,如果你有編寫configure.ac和Makefile.ac文件的經驗,就更容易。

注:CMake的工作原理:

  1. 開發者/維護者創建CMakefile。
  2. Builder運行cmake,它使用CMakefile生成特定於平臺的構建文件。(linux makefiles/OSX makefiles/VS project files)
  3. Builder會關閉構建命令。
+0

請注意,對於交叉編譯,您需要一個將CMake引入交叉編譯環境的工具鏈文件,請參閱[CMake Wiki](http://www.cmake.org/Wiki/CMake_Cross_Compiling)。有[ios-cmake](http://code.google.com/p/ios-cmake)和[android-cmake](http://code.google.com/p/android-cmake/)項目,分別爲iOS和Android提供工具鏈文件。 – 2012-04-25 07:25:43

2

CMake是最好的選擇。 從CMake 2.8.11開始就支持Windows CE。在該版本發佈之前,可以使用CMake的Nightly Binary

+0

謝謝。將不得不看;我們目前正在使用從http://gitorious.org/~paroga/cmake/parogas-cmake.git獲得的分支,該分支基於2.8.3。 – 2013-04-12 10:50:36

+0

我目前有一個小問題。它假設ARM始終是ARMV4I,因此應該設置'/ MACHINE:THUMB',但是我們仍然在編譯'Pocket PC 2003(ARMV4)',它應該有'/ MACHINE:ARM'。 – 2013-04-15 13:07:54

+0

我應該注意到,這個問題很重要。/MACHINE標誌只出現在CMAKE _ * _ LINKER_FLAGS中,我也需要在舊版本中做一些調整。 – 2013-04-15 13:55:24