44

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

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

プログラム を構築することの意味について、ハードコアな技術的定義はありますか?

4

4 に答える 4

64

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

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

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

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

于 2009-10-25T23:52:23.543 に答える
12

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

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

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

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

于 2010-05-22T18:03:36.443 に答える
10

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

于 2009-10-25T23:47:18.233 に答える
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>
...

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

于 2009-10-25T23:53:08.513 に答える