# 強制的に全てをビルドする (make clean; make と同等)
make -B all
# ドライランする (コマンドを実行せずに表示のみ行う)
make -n all
# 並列ビルドを実行する
make -j$(nproc) all
# ディレクトリを移動してからビルドする
make -C {build_dir} all
# 指定した Makefile を使用してビルドする
make -f {Makefile} all
# デバッグ時にルールの実行過程を確認する
make --trace target
オプション説明使用例
-kエラーが発生しても可能な限り継続make -k all
-sサイレントモード(コマンドを表示しない)make -s clean
-pデータベース情報を出力(変数やルールの確認)make -p | grep CXXFLAGS
-dデバッグ情報を出力make -d target
--traceターゲットの処理過程を表示make --trace

事前に定義された変数

変数名説明デフォルト値
CCC コンパイラcc
CXXC++コンパイラg++
CFLAGSC コンパイラに与えるフラグなし
CXXFLAGSC++コンパイラに与えるフラグなし
LDFLAGSリンカ ld に与えるフラグ
RMファイルを削除するコマンドrm -f

サンプル

単一の cpp プログラム

CXX = clang++
CXXFLAGS = -std=c++11 -Wall --pedantic-errors
 
program: main.cpp
	$(CXX) $(CXXFLAGS) $< -o $@
 
run: program
	./program
 
all: clean program
 
clean:
	rm -f ./program
 
.PHONY: run clean

2 つのファイルをコンパイル&リンクする

> tree
.
├── Makefile
├── hello.cpp
├── hello.hpp
└── main.cpp
 
1 directory, 4 files
CXX=/opt/llvm/llvm@19/bin/clang++
CXXFLAGS=-std=c++17 -Wall -O3
 
all: a.out
 
run: a.out
	./a.out
 
a.out: main.o hello.o
	$(CXX) $(CXXFLAGS) -v $^ -o $@ > $(addsuffix .log, $@) 2>&1
 
main.o: main.cpp
	$(CXX) $(CXXFLAGS) -v -c $< -o $@ > $(@:%.o=%.log) 2>&1
 
hello.o: hello.cpp hello.hpp
	$(CXX) $(CXXFLAGS) -v -c $< -o $@ > $(@:%.o=%.log) 2>&1
 
clean:
	$(RM) *.o *.log a.out
.PHONY: clean

See also