2012-12-13 127 views
6

我試圖從GitHub的單聲道回放tarball中編譯單聲道3.0.2。 但是,當我在mcs文件夾獲取,編譯失敗:嘗試在CentOS 6.2上編譯單聲道3.0.2時出錯

if test -w /root/mono/mcs; then :; else chmod -R +w /root/mono/mcs; fi 
    cd /root/mono/mcs && make --no-print-directory -s NO_DIR_CHECK=1 PROFILES=' net_2_0   net_3_5 net_4_0 net_4_5 ' CC='gcc' all-profiles 
    Bootstrap compiler: Mono C# compiler version 3.0.3.0 
    Makefile:43: warning: overriding commands for target 'csproj-local' 
../build/executable.make:149: warning: ignoring old commands for target 'csproj-local' 
    Makefile:43: warning: overriding commands for target 'csproj-local' 
../build/executable.make:149: warning: ignoring old commands for target 'csproj-local' 
    make[7]: *** No rule to make target '../../external/ikvm/reflect/*.cs', needed by '../class/lib/basic/basic.exe'. Stop. 
    make[6]: *** [do-all] Error 2 
    make[5]: *** [all-recursive] Error 1 
    make[4]: *** [profile-do--basic--all] Error 2 
    make[3]: *** [profiles-do--all] Error 2 
    make[2]: *** [all-local] Error 2 
    make[2]: Leaving directory '/root/mono/runtime' 
    make[1]: *** [all-recursive] Error 1 
    make[1]: Leaving directory '/root/mono' 
    make: *** [all] Error 2 

我已經嘗試過這樣做make get-monolite-latest安裝MONOLITE並且已經試圖安裝2.X版本,然後編譯。這些解決方案都沒有工作。 我對3.0.2版本的興趣是新的Razor模板引擎和MVC 4框架,但是,如果沒有可能爲CentOS 6編譯/安裝或二進制包,我將不勝感激以前版本的存儲庫。

回答

10

external/子目錄包含使用所謂的git submodules的外部依賴關係。

如果在從tarball編譯時遇到任何這些目錄中缺少文件的錯誤,那麼我的猜測是無論使用哪個腳本來創建這個tarball都會被破壞,並且不包含任何這些依賴關係。

如果您直接從github獲得源代碼,那麼您需要運行git submodule initgit submodule update

理論上,您可以通過查看.gitmodules文件從github下載每個這些子模塊。

但是,git會記錄每個主模塊提交中每個子模塊的特定修訂版本。因此,如果您在單聲道中籤出一些特定的提交併使用git submodule update,那麼在提交時提交的作者正在使用的每個模塊都會得到完全相同的修訂。

如果你想從源代碼編譯,我建議只使用git來獲取源代碼。它會自動爲您獲取每個依賴關係的正確版本,並且使您可以更輕鬆地稍後更新到新版本和/或進行本地更改。

+0

它運作良好。非常感謝你! –

+0

感謝您爲我工作以及最新版本(3.1.2) –

+0

作爲參考,GitHub存儲庫版本選項卡上的mono-4.3.2.467 tarball是其中一個已損壞的版本。 >< –