bambooflow Note

Makefile

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

Makefileメモ

とりあえず、これだけ覚えておけば。


シンプルMakefile

CXX = g++
CXXFLAGS  = -Wall
#CXXFLAGS += -O3
#CXXFLAGS += -g
 
LDFLAGS =
 
TARGET = run.x
 
SRCS = sub.cpp main.cpp
OBJS = $(SRCS:%.cpp=%.o)
 
.SUFFIXES: .cpp .o
 
$(TARGET): $(OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)
 
.cpp.o:
	$(CXX) $(CXXFLAGS) -o $@ -c $<
 
clean:
	rm -rf *.o $(TARGET)
 
 

マクロの使用


ターゲット名: 依存ファイル名1 依存ファイル名2 ... 
	実行コマンド

$@ ターゲット名
$< 最初の依存ファイル名
$? ターゲットより新しいすべての依存ファイル名
$^ すべての依存ファイル名
$+ Makefileと同じ順番の依存するファイル名
$* サフィックスを除いたターゲット名
$% ターゲットがアーカイブメンバだったときのターゲットメンバ名

シンボル


シンボル 内容 デフォルトの定義
CXX C++コンパイルコマンド名 g++
CXXFLAGS C++コンパイルオプション 未定義
CPPFLAGS プリプロセッサ用オプション 未定義
TARGET_ARCH 未定義
LDFLAGS リンカ用オプション 未定義
COMPILE.cc C++のコンパイル実行 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.C $(COMILE.cc)
COMPILE.cpp $(COMILE.cc)
LINK.cc C++のリンク実行
(ソースから一気に実行体を作る)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
LINK.C $(LINK.cc)
LINK.cpp $(LINK.cc)
LINK.o オブジェクトファイルのリンク $(CC) $(LDFLAGS) $(TARGET_ARCH)
OUTPUT_OPTION -o $@


ソースファイルとオブジェクトファイルのディレクトリを分けてコンパイルする方法


CXX = g++ 
 
TARGET = run.x
 
SRCS = main.cpp func1.cpp func2.cpp
 
OBJS := $(SRCS:.cpp=.o)
OBJS := $(addprefix objs/,$(OBJS))
 
$(TARGET): $(OBJS)
   $(CXX) -o $@ $(OBJS)
 
objs/%.o: srcs/%.cpp
   $(CXX) -c $< -o $@
 
clean:
  rm -rf objs/*.o $(TARGET)

  • 実行結果
g++ -c srcs/main.cpp -o objs/main.o
g++ -c srcs/func1.cpp -o objs/func1.o
g++ -c srcs/func2.cpp -o objs/func2.o
g++ -o run.x objs/main.o objs/func1.o objs/func2.o






参考

  • http://www.02.246.ne.jp/~torutk/cxx/make/gnumake.html

タグ:

Makefile
記事メニュー
目安箱バナー