[C++] 03 FLTKのMakefile作成 サブディレクトリへの対応

[M1 Mac, Big Sur 11.6.1, FLTK 1.3.8]

自製アプリのJavaからC++への移植にあたり、複数ソースコード・複数サブディレクトリに対応したMakefileを作成しました。参考サイトの記事がなければ何日掛かったか分かりませんね。本当に感謝です。

appファイルを作成するには、カレントディレクトリをbinに変更し、”fltk-config –post [実行ファイル]”コマンドを使います。

CMakeという便利なツールがあることを途中で知りましたが、もうMakefileを作ってしまったのでこのまま進めます。趣味としてプログラミングを楽しまれるのであればMakefileの自作をお勧めします。

これでコーディングに専念できる環境がほぼ整いました。

# コンパイラ設定他
COMPILER = clang++
DEBUG = -g

# フラグ設定
CXXFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags )
LDFLAGS = $(shell fltk-config --use-gl --use-images --ldflags ) -lc++ 

# includeパス設定
INCLUDE = -I../include -I/opt/homebrew/Cellar/fltk/1.3.8/include

# linkパス設定
LINK = -L/opt/homebrew/Cellar/jpeg/9e/lib -L/opt/homebrew/Cellar/libpng/1.6.37/lib

# 実行ファイル設定
TARGET = test
TARGETDIR = ../bin

# ソースコードパス
SRCROOT   = .

# oファイルの出力ディレクトリ
OBJROOT   = ../obj

# ソースディレクトリのリスト化
SRCDIRS := $(shell find $(SRCROOT) -type d)

# ソースディレクトリから全てのcppファイルをリスト化
SOURCES   = $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.cpp))

# cppファイルのリストからオブジェクトファイルをリスト化
OBJECTS   = $(addprefix $(OBJROOT), $(patsubst ./%,/%,$(SOURCES:.cpp=.o)))

# oファイルの出力ディレクトリをリスト化
OBJDIRS   = $(addprefix $(OBJROOT), $(patsubst ./%,/%,$(SRCDIRS)))

# cppファイルからoファイル作成
$(OBJROOT)/%.o: $(SRCROOT)/%.cpp
	@if [ ! -e `dirname $@` ]; then mkdir -p `dirname $@`; fi
	$(COMPILER) $(CXXFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<

# oファイルから実行ファイル作成
$(TARGET): $(OBJECTS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJECTS) $(LDFLAGS) $(LINK)

# 依存ファイル
-include $(DEPENDS)

# 全ソース強制コンパイル
all: clean $(TARGET)

# 全ファイル削除(cpp以外)
clean:
	rm -rf $(OBJDIRS) $(DEPENDS) $(TARGETDIR)/$(TARGET)

参考サイト