Makefileを使ってみたい
Makefile
今日のお話
- Makefileの仕組みを知る
環境
- CentOS 7.3
注意事項
- 説明に重点を置いているので、順に説明していきます。急いでいる人は下から読んでいくことがオススメです!
- 間違っていることがあればコメントください!
フォルダ構成
- Project(ディレクトリ) |-main.cpp |-Hoge.hpp(インタフェースクラス) |-HogeSub.hpp |-HogeSub.cpp
Makefileの中身の名称
ターゲット:依存ファイル コマンド
Makefileを使わない場合
↓みたいな感じでコマンドを順次実行する必要がある
$ g++ -c HogeSub.cpp -o HogeSub.o $ g++ -c main.cpp -o main.o $ g++ main.o HogeSub.o
とりあえずMakefile作る
All: g++ -c HogeSub.cpp -o HogeSub.o g++ -c main.cpp -o main.o g++ main.o HogeSub.o
初期進化
変数、依存ファイルを知ると↓みたいになった。
CC = g++ CFLAGS = -g -Wall All: main.o HogeSub.o $(CC) $(CFLAGS) -o main main.o HogeSub.o mani.o: main.cpp $(CC) $(CFLAGS) -o mani.o -c main.cpp HogeSub.o: HogeSub.cpp $(CC) $(CFLAGS) -o HogeSub.o -c HogeSub.cpp clean: rm -f *.o main
All
ターゲットが呼び出されるAll
ターゲットに依存ファイルmain.o HogeSub.o
と書かれているため、main.o
ターゲットが呼び出され、コマンドが実行される(main.oファイルができる)HogeSub.o
ターゲットが呼び出される(HogeSub.oファイルができる)- 依存ファイルが解消されたので、
All
ターゲットが呼び出される
※ -g
はデバッグ情報、 -Wall
は警告オプションを全て有効にする
ちょっとカッコよくなってきたMakefile
コマンドが使えること、サフィックスルールを知ったら↓みたいになった。
CC = g++ CFLAGS = -g -Wall SRC = $(shell ls *.cpp) OBJS = $(SRC:%.cpp=%.o) All:$(OBJS) $(CC) $(CFLAGS) -o main $(OBJS) clean: rm -f *.o main
戯言
トリビアなmakefile入門
http://www.jsk.t.u-tokyo.ac.jp/~k-okada/makefile/