※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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

とか


参考サイト