“Building”指的是什么?

55
在集成开发环境(IDE)中,你可以将源代码编译成机器码。你可以调试程序,也就是逐步执行程序并查找错误。但是,构建程序有什么作用?在VS中,当你构建一个程序时,它会在一个debug文件夹中生成可执行文件。
4个回答

73
建立意味着许多人会有许多不同的理解,但通常它指的是开始使用开发人员生成的源文件,并以安装包等形式结束,准备进行部署。建立过程可能包含以下内容:
  • 源文件编译(适用于支持单独/显式编译步骤的语言/环境)
  • 目标代码链接(适用于支持单独/显式链接步骤的语言/环境)
  • 分发包(也称为“安装程序”)的生成
  • 嵌入在源代码文件中的文档生成,例如Doxygen、Javadoc
  • 执行自动化测试,例如单元测试、静态分析测试和性能测试
  • 生成报告,告知开发团队构建过程中出现了多少警告和错误
  • 部署分发包。例如,构建成功后,构建可以自动部署/发布 Web 应用程序的新版本。
构建可以手动完成,也可以自动化完成,或者二者兼而有之。手动构建需要逐个执行构建命令,如编译器。自动化构建将所有单独的构建工具打包成一个大型构建程序,可以(理想地)在单个步骤中运行。

这提供了更多的细节。 - heretoinfinity
构建自动化系统,如Gradle,可以这样解释他们的工具。 - Rodrigo García

16
许多项目涉及大量源文件。原则上,您可以手动编译其中任何一个文件 - 您使用编译器将该源文件编译成包含机器代码的(临时)目标文件。
实际上,手动逐个编译每个源文件太过繁琐,甚至更加繁琐的是手动跟踪哪些源文件需要重新编译。因此,我们通过运行自动化构建程序 - 通常称为“make”来一次性构建整个项目。该程序会遍历源文件列表,通常存储在另一个名为“makefile”的“源”文件中,并对每个文件调用编译器 - 许多版本的“make”足够智能,只重新编译已更改且需要重新编译的文件。
虽然编译可以说是构建过程中最重要的部分,但通常“构建”在编译器之后运行许多其他程序。偶尔,完整的构建将花费更多时间来运行这些其他程序而不是运行编译器。
例如,许多人发现有一个单一按钮方便,不仅可以将所有源代码编译到最新版本,还可以运行一系列标准测试(C2:一键测试)。因此,makefile还列出了运行这些测试所需的任何命令,这些命令成为构建过程的一部分。

10

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


1
我认为那是编译代码。 "构建"可能涉及其他步骤。 - Bn.F76

4

这并不一定涉及到人们对“构建”所指的含义,但就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>
...

这句话的意思是,“'build' 大致意味着 '编译' 加上所有相关的辅助事件,这些事件可以将代码制品转化为可部署的结果”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接