web-dev-qa-db-ja.com

プログラミングの定義:「構築」とは正確には何ですか。

buildソリューション/プロジェクト/プログラムとはどういう意味ですか?私は自分の定義が正しいことを確認したいのです(会話するときに馬鹿のように聞こえないように)。 IDEでは、(間違っている場合は訂正してください)コンパイルソースコード/プログラミングコードをコンピューターで読み取り可能なマシンコードに変換できます。 debugプログラムを実行できます。これは基本的にプログラムをステップスルーし、エラーを探します。

しかし、buildingプログラムは正確に何をしますか? VSでは、プログラムをビルドすると、デバッグフォルダーに実行可能ファイルが生成されることを認識しています。

プログラムにとってbuildの意味についてのハードコアな技術定義はありますか?

37
contactmatt

これは、人間が「ビルド」について何を意味するかには必ずしも関係しませんが、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>
...

これは、「ビルド」が大まかに「コンパイルに加えて、コードアーティファクトからデプロイ可能な結果に至るすべての関連する補助イベント」を意味することを示唆しています。

4
Brian

構築は多くの人にとって多くのことを意味しますが、一般に、開発者によって作成されたソースファイルから始まり、展開の準備ができているインストールパッケージなどで終わることを意味します

「ビルド」には多くのものを含めることができます。

  • ソースファイルのコンパイル(個別の/明示的なコンパイルステップをサポートする言語/環境用)
  • オブジェクトコードのリンク(個別の/明示的なリンクステップをサポートする言語/環境の場合)
  • 「インストーラー」とも呼ばれる配布パッケージの作成
  • ソースコードファイルに埋め込まれているドキュメントの生成。 Doxygen、Javadoc
  • 単体テスト、静的分析テスト、パフォーマンステストなどの自動テストの実行
  • ビルド中に発生した警告とエラーの数を開発チームに通知するレポートの生成
  • 配布パッケージの展開。たとえば、ビルドはWebアプリケーションの新しいバージョンを自動的にデプロイ/公開できます(ビルドが成功したと仮定します)。

「ビルド」は「手作業」で行うことも、自動化することも、2つのハイブリッドにすることもできます。手動ビルドは、コンパイラなどのビルドコマンドを1つずつ実行する必要があるビルドです。自動ビルドは、個々のビルドツールをすべてまとめて、(理想的には)単一のステップで実行できる大きなビルドプログラムにします。

53
Greg Mattes

これは、人間が読み取れるソースアーティファクトを機械が読み取れるアーティファクトに変換するプロセスを意味します。

9
Doug McClean

多くのプロジェクトには、多くのソースファイルが含まれます。原則として、これらのファイルのいずれかを単独で手動でコンパイルできます。コンパイラを使用して、そのソースファイルをマシンコードを含む(一時的な)オブジェクトファイルにコンパイルします。

実際には、すべてのソースファイルを一度に1つずつ手動でコンパイルするのは非常に面倒であり、どのソースファイルを再コンパイルする必要があるかを手動で追跡するのはさらに面倒です。そのため、自動ビルドプログラム(通常は「make」と呼ばれます)を実行して、プロジェクト全体を一度にビルドします。そのプログラムは、多くの場合「makefile」という名前のさらに別の「ソース」ファイルに保存されているソースファイルのリストを調べ、それぞれのコンパイラを呼び出します。「make」の多くのバージョンは、変更されたファイルのみを再コンパイルするのに十分スマートですしたがって、再コンパイルする必要があります。

コンパイルは間違いなくビルドプロセスの最も重要な部分ですが、多くの場合、「ビルド」はコンパイラの後に他の多くのプログラムを実行します。場合によっては、完全なビルドでは、コンパイラーを実行するよりも、これらの他のプログラムの実行に多くの時間が費やされます。

たとえば、多くの人は、すべてのソースコードを最新バージョンにコンパイルするだけでなく、標準の一連のテスト( C2:ワンボタンテスト )を1つのボタンで実行すると便利だと感じています。したがって、makefileには、ビルドプロセスの一部となるこれらのテストを実行するために必要なコマンドもリストされます。

7
David Cary