我正在尝试从GitHub的Mono repo的tarball编译Mono 3.0.2。
但是当我进入mcs
文件夹时,编译失败了:
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编译/安装或二进制包,我会很感激使用以前版本的存储库。
答案 0 :(得分:10)
external/
子目录包含使用所谓的git submodules的外部依赖项。
如果从tarball编译时遇到任何与这些目录中丢失文件相关的错误,那么我的猜测是,用于创建此tarball的任何脚本都被破坏,并且不包含任何这些依赖项。
如果你直接从github获得了你的资源,那么你需要运行git submodule init
和git submodule update
。
理论上,您可以通过查看.gitmodules文件从github下载每个子模块。
但是,git会在每个主模块的提交中记录每个子模块的特定修订版本。因此,如果您以单声道检出某些特定提交并使用git submodule update
,那么您将获得提交作者在进行提交时使用的每个模块的完全相同的修订。
如果您想从源代码编译,我建议您只使用git获取源代码。它会自动为您获取每个依赖项的正确版本,并使您以后更容易更新到新版本和/或进行本地更改。