[C++] 184 C++ & アセンブラ用Makefile

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]

簡単なコードをアセンブリ言語で書くためのMakefileを作成しました。

cppファイルからsファイルに変換して叩き台にすることもできますし、sファイルを一から書くことも可能です。

きょうびアセンブリ言語を使うのは命令セットの探索やインラインアセンブラなど一部の用途を除いて酔狂でしかないでしょう。

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

# オプション設定
CPPFLAGS = -std=c++17

# includeパス(-I)
INCLUDE = -I./include -I/Volumes/DATA_m1/code/cpp/mylib/include

# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)

# アセンブリファイル
ASMDIR = ./asm
ASMS = $(addprefix $(ASMDIR), $(patsubst ./src/%.cpp,/%.s,$(SRCS)))

# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src/%.cpp,/%.o,$(SRCS)))

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

# $<:元ファイル $@:作成ファイル

# cppファイルからsファイル作成
$(ASMDIR)/%.s: $(SRCDIR)/%.cpp
	$(COMPILER) $(CPPFLAGS) $(INCLUDE) $(DEBUG) -fno-pic -fomit-frame-pointer -S $<
	mv *.s $(ASMDIR)

# sファイルからoファイル作成
$(OBJDIR)/%.o: $(ASMDIR)/%.s
	$(COMPILER) -o $@ $< -c

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

# ビルド(実行ファイル作成)
.PHONY:tar
tar: $(TARGET)

# cppファイルからsファイル作成
.PHONY:asm
asm: $(ASMS)

# sファイルからoファイル作成
.PHONY:obj
obj: $(OBJS)

# oファイル・実行ファイル削除
.PHONY:clean
clean:
	rm -rf $(OBJS) $(TARGETDIR)/$(TARGET)