Build 为什么要在IDE中包含的构建系统之上使用构建系统?

Build 为什么要在IDE中包含的构建系统之上使用构建系统?,build,build-process,Build,Build Process,我听过不止一个人说,如果你的构建过程点击了构建按钮,那么你的构建过程就被破坏了。这通常伴随着建议使用诸如make,cmake,nmake,MSBuild,等等。这些工具到底提供了什么来证明手动维护单独的配置文件是合理的 编辑:我最感兴趣的是,对于一个在~20K线C++项目上工作的开发人员来说,答案是一样的,但是我也对一般情况感兴趣。 EDIT2:这个问题似乎没有一个好的答案,所以我继续说,让它成为CW。作为对那些谈论持续集成的人的回应,是的,我完全理解在一个项目中有很多开发人员使用CI是很好的。

我听过不止一个人说,如果你的构建过程点击了构建按钮,那么你的构建过程就被破坏了。这通常伴随着建议使用诸如
make
cmake
nmake
MSBuild
,等等。这些工具到底提供了什么来证明手动维护单独的配置文件是合理的

<>编辑:我最感兴趣的是,对于一个在~20K线C++项目上工作的开发人员来说,答案是一样的,但是我也对一般情况感兴趣。
EDIT2:这个问题似乎没有一个好的答案,所以我继续说,让它成为CW。作为对那些谈论持续集成的人的回应,是的,我完全理解在一个项目中有很多开发人员使用CI是很好的。然而,这是CI的一个优势,而不是维护单独的构建脚本。它们是正交的:例如,Team Foundation Bug是一个CI解决方案,它使用VisualStudio的项目文件作为它的配置。

< P>如果您有一个关闭的、持续集成的构建过程,它将由一个Ant驱动或创建样式脚本。当在单独的生成计算机上检测到更改时,您的CI流程将检查代码,使其脱离版本控制,编译、测试、打包、部署并创建摘要报告。

假设您有5个人在处理同一组代码。这5个人中的每一个人都在对同一组文件进行更新。现在,您可以单击build按钮,您知道您的代码是有效的,但是当您将其与其他人集成时又会怎样呢。你唯一能知道的是,如果你得到了其他人的,并尝试。偶尔这样做很容易,但一遍又一遍地这样做很快就会让人厌烦

使用自动执行此操作的构建服务器,它会检查代码是否始终为每个人编译。每个人都知道构建是否有问题,问题是什么,没有人需要做任何工作来解决它。小事情加起来,可能需要几分钟的时间来提取最新的代码并尝试编译它,但是一天做10-20次很快就会变成浪费时间,特别是当你有多人在做的时候。当然你可以不用它,但是让一个自动化的过程一遍又一遍地做同样的事情,然后让一个真正的人来做,这要容易得多

还有一件很酷的事。我们的过程也被设置为测试所有sql脚本。按build按钮无法完成此操作。它会重新加载需要应用补丁的所有数据库的快照,并运行这些快照,以确保它们都能正常工作,并按预期顺序运行。构建服务器也足够智能,可以运行所有单元测试/自动化测试并返回结果。确保它可以编译是很好的,但是有了自动化服务器,它可以自动处理许多步骤,这可能需要一个人花一个小时来完成


更进一步,如果您有一个与构建服务器一起的自动化部署过程,那么部署是自动的。任何可以按下按钮运行流程并部署的人都可以将代码移动到qa或生产环境中。这意味着程序员不必花时间手工操作,这很容易出错。当我们没有这个过程时,对于是否所有的东西都能正确安装总是一个废话,通常是网络管理员或程序员必须这样做,因为他们必须知道如何配置IIS和移动文件。现在,即使是最初级的qa人员也可以刷新服务器,因为他们只需要知道按下哪个按钮

除了其他人已经解决的持续集成需求之外,您可能还想自动化构建过程的其他方面。也许这很简单,比如在生产构建中增加版本号,或者运行单元测试,或者重置和验证测试环境,或者运行FxCop或自定义脚本,自动检查代码以符合公司标准。除了简单的代码编译之外,构建脚本只是一种自动化某些东西的方法。然而,大多数这类事情也可以通过几乎所有现代IDE都允许设置的预编译/编译后操作来完成


老实说,除非您有很多开发人员致力于您的源代码管理系统,或者有很多系统或应用程序依赖于共享库并需要执行CI,否则与更简单的替代方案相比,使用构建脚本可能是过火了。但是,如果您处于上述情况之一,那么从源代码控制中提取并执行自动生成的专用生成服务器应该是您的团队武库的重要组成部分,而设置一个服务器的最简单方法是使用
make
MSBuild
Ant
,等等。

我使用的IDE构建系统都可以从自动化构建/CI工具等工具中使用,因此不需要单独的构建脚本

然而,在构建系统之上,您需要自动化测试、版本控制、源代码管理标记和部署(以及发布产品所需的任何其他内容)


因此,您可以创建扩展IDE构建的脚本并执行额外操作。

IDE管理的构建描述并不总是理想的一个实际原因与版本控制以及与其他开发人员所做更改(即合并)集成的需要有关

如果您的IDE使用单个平面文件,那么将两个项目文件合并为一个可能非常困难(如果不是不可能的话)。它可能使用基于文本的格式,如XML,但众所周知,使用标准的差异/合并工具很难使用XML。人们使用GUI进行编辑这一事实更可能导致项目文件中出现不必要的更改

带分发