LoginSignup
57
70

More than 5 years have passed since last update.

Makefileの書き方メモ

Posted at

Makefileの基本的な構造

  (1.変数の設定)
-------------------
  (2.ターゲットと実行)

1.変数の設定

CC=

使用するコンパイラ

C言語の場合
CC = gcc
C++の場合
CXX = g++
IntelCコンパイラを使用する場合
CC = icc

INCLUDE= or INCDIR=

インクルードするディレクトリの指定をする。

初期値
INCLUDE = -I./include
e.g.
INCDIR = -I /usr/local/include -I /usr/include

CFLAGS =

Cコンパイルのオプション

CFLAGSにて設定する各オプションについて

オプション 内容
-Wall 全ての警告を出力する
-O2 コードの最適化レベル
gccのデフォルトは-O0
-D マクロ定義
-g  デバッグ用の情報を保存する
...
e.g.
CFLAGS = -Wall -O2 $(INCDIR)

LDFLAGS =

リンク用のディレクトリを指定する。

e.g.
LDFLAGS = -L /usr/lib -L /usr/local/lib

LIBS =

ライブラリ用のファイルを指定をする。

e.g.
LDFLAGS = -l 〇〇〇 -l 〇〇〇.a

OBJS =

生成されるオブジェクト名を指定する。

e.g.
OBJS = 〇〇〇.o

2.ターゲットと実行

ターゲット(実行ファイル)と依存ファイル

ターゲット(実行ファイル)と依存ファイルを:区切りで記述します。

e.g
〇〇〇.out:〇〇〇1.o 〇〇〇2.o 〇〇〇3.o

その他にターゲットは型ルールやコマンドに使われます(後述)。

よく使われる自動変数(マクロ)

マクロ 内容
$< 最初の依存するファイルの名前
$@ ターゲットファイル名
...

ターゲット(型ルール)と処理

※古い手法としてサフィックスルールが使われていましたが、現在では型ルールが一般的です。

サフィックスルール 型ルール 内容
.c.o: %.o : %.c 〇〇.cというファイルに対して〇〇.oを生成する
.o.out: %.out : %.o 〇〇.oというファイルに対して〇〇.outを生成する
...
e.g.
.c.o:
    $(CC) $(CFLAGS) -c $< -o $@

test1.c test2.cというファイルがあればtest1.oとtest2.oが生成される。

ターゲット(コマンド)と処理

make cleanなどのコマンドを実行した時の処理を記述する。

コマンド名 処理内容
all 全てを実行する処理を記述する
clean 生成されたファイルを削除する処理を記述する
install  installコマンドを用いてどこに何をインストールするかの処理を記述する
...
e.g.
clean:
    rm -f *.out
    rm -f *.o
57
70
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
70