ビルド作業においては、プログラムが大きくなればなるほど、下記のことを考慮する必要があり複雑になっていきます。
- 他のソースファイルへの依存関係
- コンパイルする順序
他のソースファイルへの依存とは?
例えば、下記のようなプログラムがあった場合は、コンパイルしてオブジェクトファイルを作るには「stdio.h」というヘッダファイルが必要になってしまいます。「stdio.h」というヘッダファイルに依存しているということになります。
1 2 3 4 5 |
#include <stdio.h> int main(){ ~ } |
逆に全く何もインクルードしていないソースファイルやヘッダファイルがあった場合は、それは他ファイルへ依存していないと言えます。
ソースの依存における影響(コンパイル順序)とは?
依存している先のコードが変更された場合は、依存元のソースコードもビルド作業をやり直す必要があります。
解決策は?
シェルスクリプト等のスクリプトを使う。
色々ありますが、まずはビルド作業の手順を記述したスクリプトを作ることでしょう。
Linuxでは「シェルスクリプト」、Windowsでは「バッチファイル」が使えます。
シェルの懸念点
シェルスクリプトでのビルドは、ソースファイルの数に応じて処理時間が長くなってしまいます。
なぜなら、少しの修正でもすべてのファイルに対して毎回コンパイルやリンク作業を行うためです。
それを解決するのがmakeになります。
「make」によるビルド
makeの概要
シェルよりも高度で効率的なビルドを記述できるツールです。シェルスクリプトと違って必ずしも順番に実行されるわけではないです。
Makefile
makeを使う際に、ビルドの手順や構造(プログラムのコンパイルやリンク方法)を記述するファイルになります。
書き方
1 2 |
ターゲット:依存ファイル 実行するべきコマンド |
種類 | 説明 |
---|---|
ターゲット | 出力ファイル名 |
依存ファイル | 出力ファイルの依存ファイル(複数指定可能) |
実行するべきコマンド | ターゲットを生成するためのコマンド(gcc -c等) |
makeの実行方法
1 |
make ターゲット名(省略したら先頭のターゲットになる。) |
シェルと違って必ず前から順番にプログラムが実行されるわけではありません。
シェルスクリプトと違って、ターゲットに記述された依存関係を把握して、修正箇所に影響のあるファイルのみのビルドを自動で行ってくれるのです。短時間でのビルド作業が可能となります。
この記事へのコメントはありません。