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

但到底是做什么的 建筑 一个程序做什么?在 VS 中,我知道当你构建一个程序时,它会在调试文件夹中生成一个可执行文件。

任何硬核技术的定义 建造 一个程序?

有帮助吗?

解决方案

这并不一定与人类对“构建”的意义有关,但就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'大致意味着“编译加上所有相关的辅助事件,这些事件可以帮助您从代码工件到可部署的结果”。

其他提示

建筑对于很多人来说意味着很多事情,但是 一般来说,这意味着从开发人员生成的源文件开始,到准备部署的安装包等内容结束.

“构建”可以包含很多东西:

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

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

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

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

实际上,一次一个地手动编译每个源文件太繁琐了, 甚至更乏味地手动跟踪需要重新编译的源文件。 因此,我们通过运行自动构建程序(通常称为“make”)立即构建整个项目。 该程序通过源文件列表,通常存储在另一个“源”文件中。名为“makefile”的文件,并在每个文件上调用编译器 - 许多版本的“make”非常聪明,只能重新编译已更改的文件,因此需要重新编译。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top