2.5. Make でのさらなるコードの管理


GNU make ユーティリティー (略称 make) は、ソースファイルからの実行可能ファイルの生成を管理するツールです。make は自動的に、複雑なプログラムのどの部分が変更されたかを判断し、再コンパイルする必要があります。make は Makefile と呼ばれる設定ファイルを使用して、プログラムの構築方法を制御します。

2.5.1. GNU make および Makefile の概要

特定のプロジェクトのソースファイルから使用可能な形式 (通常は実行ファイル) を作成するには、必要な手順を完了します。後で繰り返し実行できるように、アクションとそのシーケンスを記録します。

Red Hat Enterprise Linux には、この目的に合わせて設計されたビルドシステムである、GNU make が含まれています。

GNU make とは
GNU make は、ビルドプロセスの命令が含まれる Makefile を読み込みます。Makefile には、特定のアクション (レシピ) で特定の条件 (ターゲット) を満たす方法を記述する複数の ルール が含まれています。ルールは、別のルールに階層的に依存できます。

オプションを指定せずに make を実行すると、カレントディレクトリーで Makefile が検索され、デフォルトのターゲットに到達しようとします。実際の Makefile ファイル名は Makefilemakefile、および GNUmakefile のいずれかになります。デフォルトのターゲットは、Makefile の内容で決まります。

特定のターゲットで make を実行するには、以下を実行します。

$ make target
Makefile の構造と構文
Makefile は比較的単純な構文を使用して 変数ルール を定義します。Makefile は ターゲットレシピ で構成されます。ターゲットでは、ルールが実行された場合にどのような出力が表示されるのかを指定します。レシピの行は、TAB 文字で開始する必要があります。

通常、Makefile は、ソースファイルをコンパイルするルール、作成されるオブジェクトファイルをリンクするルール、および階層上部のエントリーポイントとしてのロールを果たすターゲットで設定されます。

基本的な Makefile の例
1 つのファイル (hello.c) で構成される C プログラムを構築する場合は、以下の Makefile を参照してください。
all: hello

hello: hello.o
        gcc hello.o -o hello

hello.o: hello.c
        gcc -c hello.c -o hello.o

この例では、ターゲット all に到達するには、ファイル hello が必要です。hello を取得するには、hello.o (gcc でリンクされる) が必要で、これは hello.c (gcc でコンパイルされる) に基づいて作成されます。

ターゲットの all は、ピリオド (.) で開始されない最初のターゲットであるため、デフォルトのターゲットとなっています。カレントディレクトリーにこの Makefile が含まれている場合に、引数なしで make を実行するのは、make all を実行するのと同じです。

変数を使った高度な Makefile
より一般的な Makefile は、この手順を正規化する変数を使用し、ターゲット "clean" を追加して、ソースファイル以外をすべて削除します。
CC=gcc
CFLAGS=-c -Wall
SOURCE=hello.c
OBJ=$(SOURCE:.c=.o)
EXE=hello

all: $(SOURCE) $(EXE)

$(EXE): $(OBJ)
        $(CC) $(OBJ) -o $@

%.o: %.c
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -rf $(OBJ) $(EXE)

このような Makefile にソースファイルを追加する場合は、SOURCE 変数が定義されている行に追加します。

2.5.2. 例: Makefile を使用した C プログラムの構築

この例の手順に従い、Makefile を使用して C のサンプルプログラムを構築します。

手順

  1. hellomake ディレクトリーを作成します:

    $ mkdir hellomake
  2. 作成されたディレクトリーに変更します。

    $ cd hellomake
  3. 以下の内容で hello.c ファイルを作成します。

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
      printf("Hello, World!\n");
      return 0;
    }
  4. 以下の内容で Makefile ファイルを作成します。

    CC=gcc
    CFLAGS=-c -Wall
    SOURCE=hello.c
    OBJ=$(SOURCE:.c=.o)
    EXE=hello
    
    all: $(SOURCE) $(EXE)
    
    $(EXE): $(OBJ)
            $(CC) $(OBJ) -o $@
    
    %.o: %.c
            $(CC) $(CFLAGS) $< -o $@
    
    clean:
            rm -rf $(OBJ) $(EXE)
    重要

    Makefile レシピの行は、Tab 文字で開始する必要があります。上記のテキストをドキュメントからコピーする場合、切り取りと貼り付けのプロセスでタブではなくスペースが貼り付けられることがあります。この場合は、手動で修正してください。

  5. make を実行します。

    $ make
    gcc -c -Wall hello.c -o hello.o
    gcc hello.o -o hello

    このコマンドで、実行可能ファイル hello が作成されます。

  6. この実行可能ファイル hello を実行します。

    $ ./hello
    Hello, World!
  7. Makefile のターゲット clean を実行して、作成されたファイルを削除します。

    $ make clean
    rm -rf hello.o hello

2.5.3. make のドキュメント

make の詳細は、以下に記載のドキュメントを参照してください。

インストールされているドキュメント
  • システムにインストールされている man ページを表示するには、man ユーティリティーを使用します。
$ man make
  • システムにインストールされている情報ページを表示するには、info ユーティリティーを使用します。

    $ info make
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る