Skip to content
page
Go back

make

Edit page
# 強制的に全てをビルドする (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


Edit page

Previous Post
page
Next Post
ninja