比我承认的次数还要多,我让刚接触项目的人进行结帐,却发现他们缺少各种资源、dll 和设置。我想养成让我的项目编译顺利的正确习惯,就像从新结帐时一样。
关于如何构建我的项目以使它们在从版本控制中重新签出时不会出现编译问题,有哪些提示或建议?
我已经开始在我的项目中保留一个“资源”文件夹,其中包含源代码管理中所有需要的 dll 引用。其他人可以提出一些建议吗?
比我承认的次数还要多,我让刚接触项目的人进行结帐,却发现他们缺少各种资源、dll 和设置。我想养成让我的项目编译顺利的正确习惯,就像从新结帐时一样。
关于如何构建我的项目以使它们在从版本控制中重新签出时不会出现编译问题,有哪些提示或建议?
我已经开始在我的项目中保留一个“资源”文件夹,其中包含源代码管理中所有需要的 dll 引用。其他人可以提出一些建议吗?
找到一台未使用的旧计算机并将其设置为自动“滚动构建”:
make clean
还不够 - 扫描碎片并将其删除)如果构建或测试失败,请发送包含错误的电子邮件。包括在 #2 中选择的更改列表。
如果你真的,真的找不到机器,就在虚拟机里找。
假设您在 Visual Studio 环境中,这里有一些您可能会发现有用的东西,当然是 YMMV,请注意我们使用 Subversion,但任何 VCS 工具都应该这样做......
最后提示 - 在您完成干净的检查并成功编译后,检查您的工作副本中是否有任何修改,例如 TortoiseSVN -> 检查修改。如果检测到更改,则可能需要忽略这些文件。
像nmaven这样的工具可以帮助解决依赖性问题,(尽管您可能需要查看java maven文档以获取信息......)
像Cruisecontrol这样的持续集成工具会在每次签入后重复签出并构建您的应用程序,这可以提醒您签入会破坏构建...此外,它们可以运行您的单元测试,从而提醒您任何由以下原因引起的回归你的签到也...
其他人可以提出一些建议吗?
*.obj
等等......排除这些文件类型意味着当您运行第 2 步时,差异列表不会挤满您不打算存储的文件Debian Linux 有一个非常棒的工具叫做pbuilder
,它创建一个新安装的系统的镜像,然后尝试构建你的代码。它仅适用于 Debian 软件包系统,但您可以窃取这些想法,这非常好。
从 chrooted 环境或看起来像全新安装的虚拟机自动构建。然后,您的构建脚本将安装 DLL 等。或者您的配置脚本将枚举缺少的依赖项(所有依赖项,而不仅仅是第一个)。
现在是凌晨 1 点,我听起来语无伦次,但有两个想法很重要:
拥有可以模拟空白系统的虚拟机或 chroot 目录。如今,虚拟机可能是最简单的。
调整您的构建系统,直到它自动检查并在您的虚拟机上构建——或者抱怨缺少什么。
到那时,您可以将该过程作为自动化夜间构建的一部分,您将成为一个快乐的露营者 :-)
任何资源/DLL/设置都应与源代码一起检查到版本控制中。
它们应该被标记并与源代码同等对待,这将允许您将这些资源与源相关联并将源代码/资源/设置视为一个实体。
在我的公司,我们使用 Rational ClearCase。 除了生成的源代码文件(例如,从 MIDL 编译器生成的 .cpp 和 .h 文件)之外,所有内容都被检查到源代码控制中。因此,大多数构建都相当顺利。
您还需要确保正确设置了依赖项,以便在更改源文件时,将重新构建所有依赖库。
您可以建立一个全面的清单,在每次签入之前查阅该清单 - 但这会很耗时且容易出错(尤其是在多个开发人员中,并不是每个人都具有每次都密切关注清单的性格特征)。
相反,设置一个简单的持续集成服务器——CruiseControl.Net是开源的;JetBrains 的TeamCity是免费的 - 每次签入时都会检查构建工作。
通过这种方式,您可以肯定地知道——而不是因为遵循了清单就推断事情有效。
SCons 是另一个跨平台工作的工具,可以帮助管理您的依赖项。与 gnu make 类似,您有一个“scons 文件/脚本”——它使用 python 的事实为您提供了很大的灵活性。
(我与 SCons 没有任何关系;我们只是使用它)