Build 编程定义:什么是';大楼&x27;。

Build 编程定义:什么是';大楼&x27;。,build,build-process,build-automation,definition,Build,Build Process,Build Automation,Definition,构建解决方案/项目/计划意味着什么?我想确保我的定义是正确的(这样我说话的时候就不会听起来像个白痴)。在IDE中,您可以(如果我错了,请纠正我)将源代码/编程代码编译成计算机可读的机器代码。您可以调试程序,这基本上是单步执行程序并查找错误 但是,构建一个程序究竟做什么呢?在VS中,我知道当您构建一个程序时,它会在调试文件夹中生成一个可执行文件 对于构建一个程序意味着什么,有什么核心技术定义吗 它意味着将人类可读的源工件转换为机器可读工件的过程。构建对许多人来说意味着很多事情,但一般来说,它意味着

构建解决方案/项目/计划意味着什么?我想确保我的定义是正确的(这样我说话的时候就不会听起来像个白痴)。在IDE中,您可以(如果我错了,请纠正我)将源代码/编程代码编译成计算机可读的机器代码。您可以调试程序,这基本上是单步执行程序并查找错误

但是,构建一个程序究竟做什么呢?在VS中,我知道当您构建一个程序时,它会在调试文件夹中生成一个可执行文件


对于构建一个程序意味着什么,有什么核心技术定义吗

它意味着将人类可读的源工件转换为机器可读工件的过程。

构建对许多人来说意味着很多事情,但一般来说,它意味着从开发人员生成的源文件开始,以准备部署的安装包结束。

“构建”可以包含许多内容:

  • 编译源文件(适用于支持单独/显式编译步骤的语言/环境)
  • 目标代码链接(适用于支持单独/显式链接步骤的语言/环境)
  • 分发包的生产,也称为“安装程序”
  • 生成嵌入在源代码文件中的文档,例如Doxygen、Javadoc
  • 执行自动化测试,如单元测试、静态分析测试和性能测试
  • 生成报告,告知开发团队在生成过程中发生了多少警告和错误
  • 分发包的部署。例如,构建可以自动部署/发布web应用程序的新版本(假设构建成功)

“构建”可以“手工”完成,也可以自动化,或者两者的混合。手动构建是一种需要逐个执行编译器等构建命令的构建。自动生成将所有单个生成工具打包到一个大型生成程序中,该程序(理想情况下)可以在一个步骤中运行。

这不一定与人类对“生成”的理解有关,但就MSBuild 2.0而言,Microsoft.Common.targets中的代码对其进行了如下描述:

...
<!--
============================================================
                                    Build

The main build entry point.
============================================================
-->
<PropertyGroup>
    <BuildDependsOn>
        BeforeBuild;
        CoreBuild;
        AfterBuild
    </BuildDependsOn>
</PropertyGroup>
<Target
    Name="Build"
    Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
    DependsOnTargets="$(BuildDependsOn)"
    Outputs="$(TargetPath)"/>

<!--
============================================================
                                    BeforeBuild

Redefine this target in your project in order to run tasks just before Build
============================================================
-->
<Target Name="BeforeBuild"/>

<!--
============================================================
                                    AfterBuild

Redefine this target in your project in order to run tasks just after Build 
============================================================
-->
<Target Name="AfterBuild"/>

<!--
============================================================
                                    CoreBuild

The core build step calls each of the build targets.
============================================================
-->
<PropertyGroup>
    <CoreBuildDependsOn>
          BuildOnlySettings;
          PrepareForBuild;
          PreBuildEvent;
          UnmanagedUnregistration;
          ResolveReferences;
          PrepareResources;
          ResolveKeySource;
          Compile;
          GenerateSerializationAssemblies;
          CreateSatelliteAssemblies;
          GenerateManifests;
          GetTargetPath;
          PrepareForRun;
          UnmanagedRegistration;
          IncrementalClean;
          PostBuildEvent
    </CoreBuildDependsOn>
</PropertyGroup>
<Target
    Name="CoreBuild"
    DependsOnTargets="$(CoreBuildDependsOn)">

    <OnError ExecuteTargets="_TimeStampAfterCompile;PostBuildEvent" Condition="'$(RunPostBuildEvent)'=='Always' or '$(RunPostBuildEvent)'=='OnOutputUpdated'"/>
    <OnError ExecuteTargets="_CleanRecordFileWrites"/>

</Target>
...
。。。
建造前;
核心构建;
后建
建筑设置;
准备建造;
预构建事件;
登记不受管理;
解析参考文献;
准备资料;
ResolveKeySource;
编撰;
生成序列化程序集;
创建卫星组件;
生成测试;
GetTargetPath;
准备工作;
未经管理的登记;
增量清洁;
构建后事件
...

这表明“构建”大致上是指“编译加上所有相关的辅助事件,这些事件使您从代码工件获得可部署的结果”。

许多项目涉及大量源文件。 原则上,您可以自己手动编译这些文件中的任何一个——您可以使用编译器将源文件编译成包含机器代码的(临时)目标文件

实际上,一次手动编译一个源文件太繁琐了, 手动跟踪哪些源文件需要重新编译更加繁琐。 因此,我们通过运行一个自动构建程序(通常称为“make”)一次构建整个项目。 该程序遍历一系列源文件,这些源文件通常存储在另一个名为“makefile”的“源”文件中,并对每一个文件调用编译器——“make”的许多版本都足够智能,只需重新编译已更改的文件,因此需要重新编译

虽然编译可以说是构建过程中最重要的部分,但通常“构建”会在编译器之后运行许多其他程序。有时,一个完整的构建将花费比运行编译器更多的时间来运行这些其他程序

例如,许多人发现只需一个按钮,不仅可以将所有源代码编译为最新版本,还可以运行一系列标准测试()。
因此,makefile还列出了运行这些测试所需的所有命令,这些命令成为构建过程的一部分。

这提供了更多细节。像gradle这样的构建自动化系统可以这样解释它们的工具。