makefileのメモ
1
ターゲット:依存ファイル
コマンド
ソースファイルfileA.cppをコンパイルして実行ファイルfileAを作る
#Makefile
fileA:fileA.cpp
g++ -o A fileA.cpp
#eof
ありがたみ無し。
2
1.fileA.cppはfileA.hをインクルードしている
2.fileA.cppを書き換えてmake
正常にコンパイル
3.fileA.hを書き換えてmake
$make
make:'all'に対して行うべき事ではありません.
4.泣く.
Makefileの修正
#Makefile
.PHONY: all
all: fileA
fileA:fileA.o
g++ -Wall -o a.out fileA.o
#fileAはfileA.oに依存している
fileA.o: fileA.cpp
g++ -Wall -c fileA
#fileA.oはfileA.cppに依存している
fileA.o: fileA.h
#fileA.oはfileA.hに依存している
.PHONY: clean
clean:
rm -rf fileA fileA.o
#中間・実行ファイルの削除
#eof
.PHONYとは同一フォルダ内に"all"というファイルがある場合に区別するための定義
これでfileA.hのみを書き換えた場合もmakeを行う.
3
複数のファイルを一度にコンパイルする
fileA.cpp fileB.cpp fileC.cppの3つのファイルを同時にコンパイルしたい場合
#Makefile
.PHONY:all
all:file1 file2
file1:fileA.o
g++ -Wall -o fileA fileA.o
fileA.o:fileA.cpp
g++ -Wall -c fileA.cpp
fileB:fileB.o
g++ -Wall -o fileB fileB.o
fileB.o:fileB.cpp
g++ -Wall -c fileB.cpp
fileC:fileC.o
g++ -Wall -o fileC fileC.o
fileC.o:fileC.cpp
g++ -Wall -c fileC.cpp
fileB.o:fileB.h
fileC.o:fileC.h
.PHONY: clean
clean:
rm -f fileA.o fileB.o fileC.o file1 file2
#eof
これだと使いまわすのが面倒になっているのでマクロ
#Makefile
#SRC = fileA.cpp fileB.cpp fileC.cpp
OBJ1 = fileA
OBJ2 = fileB
OBJ3 = fileC
OBJS = $(SRC:%.cpp=%.o)
CXX = g++
CXXFLAGS = -Wall
PROG = OBJ1 OBJ2 OBJ3
.PHONY:all
all:$(PROG)
.SUFFIXES:.cpp .o
$(OBJ1):$(OBJ1).o
$(CXX) $(CXXFLAGS) -o $@ $<
$(OBJ2):$(OBJ2).o
$(CXX) $(CXXFLAGS) -o $@ $<
$(OBJ3):$(OBJ3).o
$(CXX) $(CXXFLAGS) -o $@ $<
.cpp.o:
$(CXX) $(CXXFLAGS) -c $<
$(OBJ2).o:$(OBJ2).h
$(OBJ3).o:$(OBJ3).h
.PHONY:clean
clean:
$(RM) *.o *~ $(OBJS) $(PROG)
#eof
とか
参考サイト
最終更新:2009年02月20日 01:42