2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2017-03-16 Makefileサンプル [長年日記]

# mingwの4.9.1では、
# >mingw32-make
# で起動する
 
CC        = g++
 
CFLAGS    = -g -std=c++11
 
INCLUDE   = -I./include -I"C:\opencv\build\include"
 
LDFLAGS   = -L"C:\opencv\build\x64\test_mingw\lib"
 
LIBS      = -lopencv_core310
 
SRCS      = $(wildcard *.cpp)  # 全部のcppファイルを片っ端から拾う
# 上記は、以下の内容を実施している
#SRCS     = api.cpp common_utils.cpp FlowGraph.o MaxFlowPathOptimizer.cpp PassengerVectorIntegrator.cpp SequentialCsvReader.cpp SimpleLogWriter.cpp StationTable.cpp TransporterResourceProposer.cpp TransporterResourceTable.cpp
 
OBJS      = $(SRCS:.cpp=.o) #SRCSの各ファイルのサフィックスの.cppを.oに変換
# 上記は、以下の内容を実施している
#OBJS      = api.o common_utils.o FlowGraph.o MaxFlowPathOptimizer.o PassengerVectorIntegrator.o SequentialCsvReader.o SimpleLogWriter.o StationTable.o TransporterResourceProposer.o TransporterResourceTable.o
 
PROGRAM   = TransporterResourceProposerDll.dll
 
.cpp.o:
    $(CC) $(CFLAGS) -c $(INCLUDE) $(LDFLAGS) $< -o $@ 
# 上記は、以下の内容を実施している
# g++ -g -std=c++11 -c -I./include -I"C:\opencv\build\include" -o api.o api.cpp  
# g++ -g -std=c++11 -c -I./include -I"C:\opencv\build\include" -o common_utils.o common_utils.cpp  
# ..... 
 
$(PROGRAM):     $(OBJS)
    $(CC) $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -shared -o $(PROGRAM) 
# 上記は、以下の内容を実施している
# g++ -I./include -I"C:\opencv\build\include" -g -std=c++11 -L"C:\opencv\build\x64\test_mingw\lib" api.o common_utils.o .... TransporterResourceTable.o (ここの改行は取り除く) 
# -lopencv_calib3d310 -lopencv_core310 -shared -o TransporterResourceProposerDll.dll
 
.PHONY: clean
clean:
    del *.o *.exe *.dll
 
# Makefileの説明は、これが秀逸 → http://shin.hateblo.jp/entry/2012/05/26/231036
# "gmake"で実行
# 無理にマクロなんか使わない(よけい分からなくなる)
 
.PHONY: all
all: ca-server ca-client ca-track ca-wire ca-operation1 ca-operation2 ca-monitor
 
ca-server: ca-server.o ca-tools.o ca-init.o ca-mediate.o c-anemone.h ca-tools.h ca-init.h ca-mediate.h
    gcc -g -o ca-server ca-server.o ca-tools.o ca-init.o ca-mediate.o -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
ca-client: ca-client.o ca-tools.o ca-init.o ca-track-init.o c-anemone.h ca-tools.h ca-init.h
    gcc -g -o ca-client ca-client.o ca-tools.o ca-init.o ca-track-init.o -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
ca-track: ca-client.o ca-tools.o ca-init.o ca-track-init.o c-anemone.h ca-tools.h ca-init.h
    gcc -g -o ca-track ca-client.o ca-tools.o ca-init.o ca-track-init.o -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
ca-wire: ca-client.o ca-tools.o ca-init.o ca-wire-init.o c-anemone.h ca-tools.h ca-init.h
    gcc -g -o ca-wire ca-client.o ca-tools.o ca-init.o ca-wire-init.o -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
ca-operation1: ca-client.o ca-tools.o ca-init.o ca-operation1-init.o c-anemone.h ca-tools.h ca-init.h
    gcc -g -o ca-operation1 ca-client.o ca-tools.o ca-init.o ca-operation1-init.o -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
ca-operation2: ca-client.o ca-tools.o ca-init.o ca-operation2-init.o c-anemone.h ca-tools.h ca-init.h
    gcc -g -o ca-operation2 ca-client.o ca-tools.o ca-init.o ca-operation2-init.o -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
 
ca-monitor: ca-client.o ca-tools.o ca-init.o ca-monitor-init.o c-anemone.h ca-tools.h ca-init.h
    gcc -g -o ca-monitor ca-client.o ca-tools.o ca-init.o ca-monitor-init.o  -Wl,--subsystem,console -lGrWin -lpthread -lwsock32 -lws2_32 -mwindows
 
 
 
.PHONY: clean
clean:
    del *.o *.exe
 
#ヘッダファイルの依存関係 (gcc -MM ca-server.cpp で調べられる)
ca-server.o: ca-server.cpp c-anemone.h ca-tools.h ca-init.h ca-mediate.h 
ca-client.o: ca-client.cpp c-anemone.h ca-tools.h ca-init.h
ca-track-init.o: ca-track-init.cpp c-anemone.h ca-tools.h
ca-wire-init.o: ca-wire-init.cpp c-anemone.h ca-tools.h
ca-operation1-init.o: ca-operation1-init.cpp c-anemone.h ca-tools.h
ca-operation2-init.o: ca-operation2-init.cpp c-anemone.h ca-tools.h
ca-monitor-init.o: ca-monitor-init.cpp c-anemone.h ca-tools.h
ca-init.o: ca-init.cpp c-anemone.h
ca-tools.o: ca-tools.cpp c-anemone.h ca-tools.h