##########################################################################################
# Specify library locations here (add or remove "#" marks to comment/uncomment lines for your platform)
# Mac OS X
DDG_INCLUDE_PATH =
DDG_LIBRARY_PATH =
DDG_BLAS_LIBS = -framework Accelerate
DDG_SUITESPARSE_LIBS = -lspqr -lumfpack -lcholmod -lmetis -lcolamd -lccolamd -lcamd -lamd -ltbb -lm -lsuitesparseconfig
DDG_OPENGL_LIBS = -framework OpenGL -framework GLUT
# # Linux
# DDG_INCLUDE_PATH =
# DDG_LIBRARY_PATH =
# DDG_BLAS_LIBS = -llapack -lblas -lgfortran
# DDG_SUITESPARSE_LIBS = -lspqr -lcholmod -lmetis -lcolamd -lccolamd -lcamd -lamd -lm
# DDG_OPENGL_LIBS = -lglut -lGL -lGLU -lX11
# # Windows / Cygwin
# DDG_INCLUDE_PATH = -I/usr/include/opengl -I/usr/include/suitesparse
# DDG_LIBRARY_PATH = -L/usr/lib/w32api -L/usr/lib/suitesparse
# DDG_BLAS_LIBS = -llapack -lblas
# DDG_SUITESPARSE_LIBS = -lspqr -lcholmod -lcolamd -lccolamd -lcamd -lamd -lm
# DDG_OPENGL_LIBS = -lglut32 -lglu32 -lopengl32
########################################################################################
TARGET = ddg
CC = g++
LD = g++
CFLAGS = -O3 -Wall -Werror -ansi -pedantic $(DDG_INCLUDE_PATH) -I./include -I./src
LFLAGS = -O3 -Wall -Werror -ansi -pedantic $(DDG_LIBRARY_PATH)
LIBS = $(DDG_OPENGL_LIBS) $(DDG_SUITESPARSE_LIBS) $(DDG_BLAS_LIBS)
########################################################################################
## !! Do not edit below this line
HEADERS := $(wildcard include/*.h)
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(addprefix obj/,$(notdir $(SOURCES:.cpp=.o)))
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LD) $(OBJECTS) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS)
obj/%.o: src/%.cpp ${HEADERS}
$(CC) -c $< -o $@ $(CFLAGS)
clean:
rm -f $(OBJECTS)
rm -f $(TARGET)
rm -f $(TARGET).exe
- 全体が3セクションに分かれている
- 1番上は、OSごとに変数(マクロ)定義をするところ
- 2番目は、OSによらず共通なマクロ登録をしている。OSごとの変数(マクロ)を使って、それをすることで、OS依存の部分とOS非依存のところを分離している。作成アプリ名、コンパイラ・リンカ・その引数を変数(マクロ)登録している
- 3番目は、このMakefile特有な記載(1番目、2番目は、使いまわしがしやすいところ)
- その内訳は、このMakefile特有な変数(マクロ)登録と、「ルール」
- 特有変数登録は、ヘッダーファイル、ソースファイル、オブジェクトファイルの指定
- 「ルール」はターゲット、依存先、コマンドの登録となる
- (1)アプリの作成
- (2)アプリを作るためのリンキング処理
- (3)リンクするべきオブジェクトファイルのコンパイル
- (4)cleanするための別建て記載
- リンクは、リンク用コマンド(g++)にオブジェクトファイルを一括で渡し、コンパイルとリンクに必要な参照先をg++のオプションとして 指定している
- コンパイルは全cppファイルをoファイルにするコマンド