GNU make

GNU Make

GNU makeはソフトウェア プロジェクトのコンパイル管理で高い人気を誇るツールです。GCCコンパイラ群の管理に使われることが多いものの、開発やソフトウェアのパッケージングなど様々な作業に利用できます。

GNU Makeを高速化

GNU makeとは?

GNU makeはソフトウェア プロジェクトのコンパイル管理で高い人気を誇るツールです。GCCコンパイラ群の管理に使われることが多いものの、開発やソフトウェアのパッケージングなど様々な作業に利用できます。

大規模なC/C++プログラムのビルドでは通常ステップが煩雑になるため、すべてのソースファイルを確実にコンパイルし、リンクするためにMakeのようなツールが必要です。また、makeでドキュメンテーション、マニュアルページ、systemdプロファイル、initスクリプト、設定テンプレートなどの補助ファイルパッケージング、インストールを管理することもできます。

makeはC / C++以外の言語にも対応しています。GNU makeはCSSやJava Scriptのサイズ圧縮などの反復作業やメンテナンス作業の自動化にも使用できます。

また、makeを使えばプログラマーや専門家でなくても、ソフトウェアのコンパイルやインストールを行うことができます。

*GCCの詳細はこちらをご覧ください。

今すぐ始める
What is GNU Make?

しくみ

GNU makeはソフトウェア プロジェクトをビルドするための指示を記述したテキストファイル (makefile) を処理します。命令を繰り返し実行し、指定されたルールと生成すべきターゲット出力を決定します。

makefileルールはターゲットと呼ばれる出力ファイル (通常はライブラリや実行ファイル) を作成するために連携するコマンド群に名前を付けたものです。ターゲットがすでに存在し、ソースが更新されていなければ、makeは不要なビルドステップをスキップしてコンパイル時間を短縮します。

CMakeとMakeについて

もっと詳しく

歴史

1976年4月にStuart Feldman氏によって開発されたmakeのフリーソフトウェア版をGNUがリリースしたのは1980年代後半のことです。1989年9月23日にリリースされたバージョン3.56がGNU FTPサーバーから (diffで) 未だに入手可能です。

最新バージョンは2020年1月19日にリリースされた4.3です。

ダウンロード / インストール方法

Linuxをお使いの場合はmakeプログラムがすでにインストールされているかもしれません。インストールされていない場合は、以下のコマンドでインストールできます。

  • Debian / Ubuntu – apt install make
  • Fedora / RHEL – yum install make
  • Arch / Manjaro – pacman -S make

これでmakeプログラムがインストールされますが、makeの性能を最大限に引き出すためにはディストリビューション付属の開発ツールをインストールすることをお勧めします。

実行するコマンドは次の通りです。

  • Debian / Ubuntu – apt install build-essential
  • Fedora / RHEL – yum groupinstall ‘Development Tools’
  • Arch / Manjaro – pacman -S base-devel

Windowsの場合は、MinGW (Minimalist GNU for Windows) をインストールするか、WSL (Windows Subsystem for Linux) を有効にしてお好きなLinuxディストリビューションをインストールして上記のコマンドを実行してください。

GNU makeの記述例

ソフトウェア プロジェクトをビルドするにはmakefileでGNU makeに指示を与えるのが一般的です。ここでは、簡単なmakefileの例を見てみましょう。

# GCCをコンパイラとして定義
CC=gcc

# メインルールとターゲット
hello: hello.c hellolib.c
$(CC) -o hello hello.c hellolib.c

# バイナリを消去するルール
clean:
rm -f hello

このプロジェクトではまずCCという変数を定義しています。これはプロジェクト全体で使用するコンパイラを指定するために行っていますが、必須ではありません。変数を変える必要が生じた場合は、このラインを変更するだけで済みます。makeでは好きなだけ変数を定義してルールで使用できるので、入力作業やリファクタリングの手間を省くことができます。

「hello」ファイルの最初のルールがデフォルトのルールとなり、makeコマンドを実行すると処理されます。関連ファイルが一覧表示されるため、ビルドの順序と選択を最適化できます。次の行では文頭にタブを入れてターゲットを作成するために実行するコマンドを一覧表示します。先に定義した変数CCを使用していることに注意してください。

最後に「make clean」コマンドで呼び出すcleanルールを定義しています。必要に応じて生成済みバイナリを削除してクリーンビルドを実行します。cleanルールは必須ではありませんが、特に複数のバイナリを生成する場合には定義しておくと便利です。

他にインストールルールを定義することもできます。一般的なソフトウェア パッケージでは「make install」を実行するように書かれていることが多く、これを実行するとインストールルールが起動して、コンパイルした実行バイナリが所定のフォルダにコピーされます。

GNU Makeの初心者のmakefileの構文で躓くことがよくあります。ルール中のビルドコマンドの前にはタブを入れる必要があります。これを間違ってスペースにした場合はmakefileが思った通りに実行しません。

メリット

GNU makeはソフトウェア プロジェクト、特に GNU/Linux系のプロジェクトをコンパイルするための貴重なツールです。シンプルなmakefile構文と、ターゲット ファイルのインテリジェントな処理により、開発おいて最適な選択肢になっています。

makeにはmakefileの実行をすばやく変更するための便利なコマンドライン引数がたくさん用意されています。その中には並列処理を可能にしてパフォーマンスを向上させる -j スイッチもあります。

GNU makeはGPL (General Public License) バージョン3ライセンスで完全なフリーソフトウェアです。

Incredibuildとの統合

Makeでは -j スイッチを使って同時に実行するプロセス数を指定できますが、それでも使えるマシンは1台だけです。GNU makeをIncredibleと連携することで、コンパイルからテスト、リリースの自動化まで製品開発を加速して優れた製品をよりすばやく定期的にリリースすることができます。

IncredibuildのVirtualized Distributed Processing™ (仮想分散処理) 技術はネットワークやクラウド上のアイドル中のCPUを利用して、ローカル環境で必要なものだけをリモートマシンでエミュレートし、すべてのマシンを数百コアのスーパーコンピュータにシームレスに変身させます。

icon

まとめ

GNU makeはGNU/Linuxエコシステムの土台です。既存のLinuxシステムのビルドでmakeが使われていないプログラムを見つけるのは不可能といっても過言ではありません。makeはLinuxカーネルなどどんな複雑なソフトウェアのビルドでも自動化できる優れたツールです。

無料トライアル

More Build systems