diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/modules/libcalc/Makefile b/modules/libcalc/Makefile new file mode 100644 index 0000000..e9977e1 --- /dev/null +++ b/modules/libcalc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = libcalc +TARGET = $(NAME).so +SUBDIRS = test +USE_SO_VERSION = y + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/modules/libcalc/Makefile b/modules/libcalc/Makefile new file mode 100644 index 0000000..e9977e1 --- /dev/null +++ b/modules/libcalc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = libcalc +TARGET = $(NAME).so +SUBDIRS = test +USE_SO_VERSION = y + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/include/calc.h b/modules/libcalc/include/calc.h new file mode 100644 index 0000000..e28d00f --- /dev/null +++ b/modules/libcalc/include/calc.h @@ -0,0 +1,8 @@ +#ifndef CALC_H +#define CALC_H + + +int add(int a, int b); + +#endif + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/modules/libcalc/Makefile b/modules/libcalc/Makefile new file mode 100644 index 0000000..e9977e1 --- /dev/null +++ b/modules/libcalc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = libcalc +TARGET = $(NAME).so +SUBDIRS = test +USE_SO_VERSION = y + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/include/calc.h b/modules/libcalc/include/calc.h new file mode 100644 index 0000000..e28d00f --- /dev/null +++ b/modules/libcalc/include/calc.h @@ -0,0 +1,8 @@ +#ifndef CALC_H +#define CALC_H + + +int add(int a, int b); + +#endif + diff --git a/modules/libcalc/src/calc.c b/modules/libcalc/src/calc.c new file mode 100644 index 0000000..059d557 --- /dev/null +++ b/modules/libcalc/src/calc.c @@ -0,0 +1,6 @@ +#include + +int add(int a, int b) +{ + return (a + b); +} diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/modules/libcalc/Makefile b/modules/libcalc/Makefile new file mode 100644 index 0000000..e9977e1 --- /dev/null +++ b/modules/libcalc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = libcalc +TARGET = $(NAME).so +SUBDIRS = test +USE_SO_VERSION = y + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/include/calc.h b/modules/libcalc/include/calc.h new file mode 100644 index 0000000..e28d00f --- /dev/null +++ b/modules/libcalc/include/calc.h @@ -0,0 +1,8 @@ +#ifndef CALC_H +#define CALC_H + + +int add(int a, int b); + +#endif + diff --git a/modules/libcalc/src/calc.c b/modules/libcalc/src/calc.c new file mode 100644 index 0000000..059d557 --- /dev/null +++ b/modules/libcalc/src/calc.c @@ -0,0 +1,6 @@ +#include + +int add(int a, int b) +{ + return (a + b); +} diff --git a/modules/libcalc/test/Makefile b/modules/libcalc/test/Makefile new file mode 100644 index 0000000..dc6af03 --- /dev/null +++ b/modules/libcalc/test/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = ut.exe +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/modules/libcalc/Makefile b/modules/libcalc/Makefile new file mode 100644 index 0000000..e9977e1 --- /dev/null +++ b/modules/libcalc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = libcalc +TARGET = $(NAME).so +SUBDIRS = test +USE_SO_VERSION = y + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/include/calc.h b/modules/libcalc/include/calc.h new file mode 100644 index 0000000..e28d00f --- /dev/null +++ b/modules/libcalc/include/calc.h @@ -0,0 +1,8 @@ +#ifndef CALC_H +#define CALC_H + + +int add(int a, int b); + +#endif + diff --git a/modules/libcalc/src/calc.c b/modules/libcalc/src/calc.c new file mode 100644 index 0000000..059d557 --- /dev/null +++ b/modules/libcalc/src/calc.c @@ -0,0 +1,6 @@ +#include + +int add(int a, int b) +{ + return (a + b); +} diff --git a/modules/libcalc/test/Makefile b/modules/libcalc/test/Makefile new file mode 100644 index 0000000..dc6af03 --- /dev/null +++ b/modules/libcalc/test/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = ut.exe +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/test/src/test.c b/modules/libcalc/test/src/test.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/libcalc/test/src/test.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/Makefile b/Makefile index aedfdb3..e44ba18 100644 --- a/Makefile +++ b/Makefile @@ -10,12 +10,15 @@ # TOPDIR ?= . RULEDIR ?= $(TOPDIR)/mk -NAME = sample +NAME = TARGET = $(NAME) -SUBDIRS = libraries +SUBDIRS = modules +USE_SO_VERSION = - - +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 # ------------------------------------------------------------------------------ include $(RULEDIR)/*-cmd.mk include $(RULEDIR)/*-conf.mk @@ -25,19 +28,19 @@ # 以下、オプションを適宜変更してください。 # -INCLUDES += -Ilibraries/include +INCLUDES += -I$(TOPDIR)/include CFLAGS += CXXFLAGS += LDFLAGS += -LIBS += -Llibraries -lcalc +LIBS += -L$(TOPDIR)/lib -lcalc CLEAN_FILES += CLEAN_DIRS += .DEFAULT_GOAL := all - - +# ------------------------------------------------------------------------------ +# *-rule : ルール # ------------------------------------------------------------------------------ include $(RULEDIR)/*-rule.mk # ------------------------------------------------------------------------------ diff --git a/config.mk b/config.mk index 29eee10..831a0c2 100644 --- a/config.mk +++ b/config.mk @@ -4,8 +4,6 @@ ## コンパイル設定 ## - - # # DEBUG モード # @@ -13,59 +11,45 @@ # TARGET=ut.exe の場合は、常に DEBUG モードでコンパイルします。 # - - # # アーキテクチャ指定 # ARCH ?= x86_64 # ARCH ?= aarch64 - - # # クロスコンパイラ指定 # ifeq ($(strip $(ARCH)),aarch64) -CROSS_COMPILE = +CROSS_COMPILE = else CROSS_COMPILE = endif - - # # C/C++ 言語規格指定 # # 指定された言語規格に従ってコンパイルします。 # C_VERSION [-std=cXX|-std=gnuXX] (XX=89,90,99,11) -# CXX_VERSION [-std=c++XX|-std=gnu++XX] (X==03,11,14,17) +# CXX_VERSION [-std=c++XX|-std=gnu++XX] (XX=03,11,14,17) # C_VERSION = -std=gnu11 CXX_VERSION = -std=gnu++14 - - # # 共通のインクルードパスを指定します。 # INCLUDES += -Iinclude INCLUDES += -I$(TOPDIR)/include - - # # 共通のライブラリパスを指定します。 # LDFLAGS += -Llib LDFLAGS += -L$(TOPDIR)/lib - - # # 共通でリンクするライブラリを指定します。 # LIBS += -lpthread -lrt - - diff --git a/libraries/Makefile b/libraries/Makefile deleted file mode 100644 index 88abe23..0000000 --- a/libraries/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# ============================================================================== -# Makefile -# ============================================================================== -# -# TOPDIR : トップディレクトリ -# RULEDIR : Meke のルール一式が格納されているディレクトリ -# NAME : モジュール名 (拡張子を含めないこと) -# TARGET : モジュールファイル名 (拡張子を含めること) -# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) -# -TOPDIR ?= .. -RULEDIR ?= $(TOPDIR)/mk -NAME = libcalc -TARGET = $(NAME).so -SUBDIRS = - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-cmd.mk -include $(RULEDIR)/*-conf.mk -include $(RULEDIR)/*-auto.mk -# ------------------------------------------------------------------------------ -# -# 以下、オプションを適宜変更してください。 -# - -INCLUDES += -CFLAGS += -CXXFLAGS += -LDFLAGS += -LIBS += - -CLEAN_FILES += -CLEAN_DIRS += - -.DEFAULT_GOAL := all - - - -# ------------------------------------------------------------------------------ -include $(RULEDIR)/*-rule.mk -# ------------------------------------------------------------------------------ - diff --git a/libraries/include/calc.h b/libraries/include/calc.h deleted file mode 100644 index e28d00f..0000000 --- a/libraries/include/calc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CALC_H -#define CALC_H - - -int add(int a, int b); - -#endif - diff --git a/libraries/src/calc.c b/libraries/src/calc.c deleted file mode 100644 index 059d557..0000000 --- a/libraries/src/calc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int add(int a, int b) -{ - return (a + b); -} diff --git a/mk/README.md b/mk/README.md new file mode 100644 index 0000000..c4474d3 --- /dev/null +++ b/mk/README.md @@ -0,0 +1,18 @@ +# Makefile 用 設定、ルール + +Makefile 用の設定、ルールを格納しているディレクトリ。 + +## 使い方 + +Makefile.tmpl を元に、Makefile を作成することで、 +本配下にあるルールを make に組み込むことができます。 + + +## ファイル命名規則 +新たなルールを追加する場合、下記ファイルの命名規則に従ってください。 +* *-cmd.mk コマンドを記載したファイル +* *-conf.mk 設定を記載したファイル +* *-rule.mk ルールを記載したファイル +* *-auto.mk 自動設定を記載したファイル + + diff --git a/mk/all-rule.mk b/mk/all-rule.mk index 96faef4..c31bac6 100644 --- a/mk/all-rule.mk +++ b/mk/all-rule.mk @@ -1,12 +1,22 @@ # ------------------------------------------------------------------------------ # all ルール # ------------------------------------------------------------------------------ +# 次を実行します。 +# (1) 全サブディレクトリに対して make all 実行 +# (2) make $(TARGET) 実行 +# (3) make $(TOP_TARGET) 実行 +# .PHONY: all all: @for subdir in $(SUBDIRS); do \ $(MAKE) all -C $$subdir; \ done ifneq ($(strip $(TARGET)),) +ifneq ($(strip $(TARGET)),ut.exe) $(MAKE) $(TARGET) +ifneq ($(strip $(TOP_TARGET)),) + $(MAKE) $(TOP_TARGET) +endif +endif endif diff --git a/mk/base-auto.mk b/mk/base-auto.mk index b35372c..ce970ff 100644 --- a/mk/base-auto.mk +++ b/mk/base-auto.mk @@ -7,33 +7,15 @@ # ------------------------------------------------------------------------------ # SRCS, OBJS, DEPS ファイル群の自動設定 # ------------------------------------------------------------------------------ +S_SRCS = $(wildcard $(addsuffix /*.s,$(SRCDIR))) C_SRCS = $(wildcard $(addsuffix /*.c,$(SRCDIR))) CXX_SRCS = $(wildcard $(addsuffix /*.cpp,$(SRCDIR))) -TMP_SRCS = $(C_SRCS) $(CXX_SRCS) +TMP_SRCS = $(C_SRCS) $(CXX_SRCS) $(S_SRCS) VPATH = $(SRCDIR) SRCS = $(filter-out $(EXCLUDES),$(TMP_SRCS)) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(addsuffix .o, $(basename $(SRCS))))) DEPS = $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d) - - -# ------------------------------------------------------------------------------ -# ターゲットが ut.exe の場合の設定 -# -# 1. DEBUG を常に有効に設定する。 -# 2. SRCDIR に、../src を追加する。 -# 3. INCLUDES に、../include を追加する。 -# 4. DEFINE に -DUNITTEST を追加する。 -# ------------------------------------------------------------------------------ -ifeq ($(strip $(TARGET)),ut.exe) -DEBUG = 1 -SRCDIR += ../src -INCLUDES += ../include -DEFINE += -DUNITTEST -endif - - - # ------------------------------------------------------------------------------ # LINK : リンカー設定 # C++ が含まれる場合、$(CXX) を使用する。 @@ -44,8 +26,6 @@ LINK = $(CXX) endif - - # ------------------------------------------------------------------------------ # CFLAGS, CXXFLAGS, LDFLAGS 設定 # ------------------------------------------------------------------------------ @@ -61,15 +41,35 @@ CXXFLAGS += $(DEFINE) CXXFLAGS += $(DEPENDS_OPTIONS) +# ------------------------------------------------------------------------------ +# ターゲットが ut.exe の場合の設定 +# +# 1. DEBUG を常に有効に設定する。 +# 2. SRCDIR に、../src を追加する。 +# 3. INCLUDES に、../include を追加する。 +# 4. DEFINE に -DUNITTEST を追加する。 +# ------------------------------------------------------------------------------ +ifeq ($(strip $(TARGET)),ut.exe) +DEBUG = 1 +SRCDIR += ../src +INCLUDES += -I../include +DEFINE += -DUNITTEST +endif ifeq ($(strip $(DEBUG)),) -# For Release +# ------------------------------------------------------------------------------ +# DEBUG が無効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の OPTIMIZATION を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(OPTIMIZATION) CXXFLAGS += $(OPTIMIZATION) else -# For Debug +# ------------------------------------------------------------------------------ +# DEBUG が有効な場合の設定 +# CFLAGS, CXXFLAGS, LDFLAGS の DEBUG_OPTIONS を有効にする +# ------------------------------------------------------------------------------ CFLAGS += $(DEBUG_OPTIONS) CXXFLAGS += $(DEBUG_OPTIONS) LDFLAGS += $(DEBUG_LDFLAGS) diff --git a/mk/base-conf.mk b/mk/base-conf.mk index 64f0e24..790f571 100644 --- a/mk/base-conf.mk +++ b/mk/base-conf.mk @@ -2,15 +2,13 @@ # 基本設定 # ============================================================================== - # ------------------------------------------------------------------------------ # デフォルトディレクトリ/ファイル設定 # ------------------------------------------------------------------------------ SRCDIR ?= src OBJDIR ?= obj EXCLUDES ?= - - +RELEASEDIR ?= release # ------------------------------------------------------------------------------ # 最適化オプション @@ -23,8 +21,6 @@ # ------------------------------------------------------------------------------ OPTIMIZATION = -O2 - - # ------------------------------------------------------------------------------ # ヘッダー依存関係出力 # 基本的に変更しないでください。 @@ -36,8 +32,6 @@ # ------------------------------------------------------------------------------ DEPENDS_OPTIONS = -MMD -MP - - # ------------------------------------------------------------------------------ # 警告オプション # -pedantic @@ -57,8 +51,6 @@ C_WARNING_OPTIONS += -Wall -Wextra -Werror CXX_WARNING_OPTIONS += -Wall -Wextra -Werror -Weffc++ - - # ------------------------------------------------------------------------------ # デバッグ用オプション # デバッグ、単体テストの際のオプションを指定します。 diff --git a/mk/check-lcov-conf.mk b/mk/check-lcov-conf.mk index f6d536b..014e20b 100644 --- a/mk/check-lcov-conf.mk +++ b/mk/check-lcov-conf.mk @@ -2,8 +2,6 @@ # lcov 設定 # ============================================================================== - - # ------------------------------------------------------------------------------ # 基本設定 # ------------------------------------------------------------------------------ @@ -15,16 +13,12 @@ GENHTML_FLAGS += --function-coverage GENHTML_FLAGS += --branch-coverage - - # ------------------------------------------------------------------------------ # C1 Coverage 有効 # ------------------------------------------------------------------------------ LCOV_FLAGS += --rc lcov_branch_coverage=1 LCOV_FLAGS += --rc genhtml_branch_coverage=1 - - # ------------------------------------------------------------------------------ # CLEAN 時の削除ファイル追加 # ------------------------------------------------------------------------------ diff --git a/mk/check-rule.mk b/mk/check-rule.mk deleted file mode 100644 index 3c516c5..0000000 --- a/mk/check-rule.mk +++ /dev/null @@ -1,14 +0,0 @@ -# ------------------------------------------------------------------------------ -# check ルール -# ------------------------------------------------------------------------------ -.PHONY: check -check: - @for subdir in $(SUBDIRS); do \ - $(MAKE) check -C $$subdir; \ - done -ifeq ($(strip $(TARGET)),ut.exe) - $(MAKE) $(TARGET) - ./ut.exe -endif - - diff --git a/mk/check-ut.rule.mk b/mk/check-ut.rule.mk deleted file mode 100644 index 0970bb9..0000000 --- a/mk/check-ut.rule.mk +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------------------------------------------------ -# ut ルール -# ------------------------------------------------------------------------------ -.PHONY: ut -ut: $(TARGET) - ./ut.exe - diff --git a/mk/clean-rule.mk b/mk/clean-rule.mk index 0575dc5..ce2617c 100644 --- a/mk/clean-rule.mk +++ b/mk/clean-rule.mk @@ -10,6 +10,6 @@ $(RM) -f $(CLEAN_FILES) endif ifneq ($(strip $(CLEAN_DIRS)),) - $(RM) -f $(CLEAN_DIRS) + $(RM) -rf $(addprefix ./,$(CLEAN_DIRS)) endif diff --git a/mk/compile-s-rule.mk b/mk/compile-s-rule.mk new file mode 100644 index 0000000..c4a27a1 --- /dev/null +++ b/mk/compile-s-rule.mk @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------ +# アセンブラ コンパイル ルール +# ------------------------------------------------------------------------------ +$(OBJDIR)/%.o: %.s + -@$(MKDIR) -p $(OBJDIR) + $(CC) $(CFLAGS) -c -o $@ $< + diff --git a/mk/git-info-conf.mk b/mk/git-info-conf.mk index 7fe4f72..8937148 100644 --- a/mk/git-info-conf.mk +++ b/mk/git-info-conf.mk @@ -14,15 +14,16 @@ # ------------------------------------------------------------------------------ VERSION := $(shell $(GIT) tag | $(SORT) -V | $(TAIL) -1 | $(SED) -e 's/^[^0-9]\+//') REVISION := $(shell $(GIT) rev-parse --short HEAD) -DATETIME := $(shell $(DATE) "+Y%m%dT%H%M%S") +DATETIME := $(shell $(DATE) "+%Y%m%dT%H%M%S") ifeq ($(strip $(VERSION)),) -VERSION := v1.0.0 +VERSION := v0.0.1 +REVISION := 0 endif -MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') -MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') -RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') +MAJOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\1/') +MINOR := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\2/') +RELEASE := $(shell $(ECHO) $(VERSION) | $(SED) -e 's/^[a-zA-Z]*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)$$/\3/') DEFINE += -DVERSION='"$(VERSION)"' -DMAJOR='"$(MAJOR)"' -DMINOR='"$(MINOR)"' -DRELEASE='"$(RELEASE)"' DEFINE += -DREVISION='"$(REVISION)"' diff --git a/mk/link-so-conf.mk b/mk/link-so-conf.mk index c556d40..67e86b8 100644 --- a/mk/link-so-conf.mk +++ b/mk/link-so-conf.mk @@ -9,11 +9,19 @@ CFLAGS += -fPIC CXXFLAGS += -fPIC +TOP_TARGET = $(addprefix $(TOPDIR)/lib/,$(TARGET)) + +HEADER_FILES = $(wildcard include/*.h) +TOP_HEADER_FILES = $(addprefix $(TOPDIR)/include/,$(notdir $(HEADER_FILES))) + +CLEAN_FILES += $(TOP_TARGET) +CLEAN_FILES += $(TOP_HEADER_FILES) + ifneq ($(strip $(USE_SO_VERSION)),) # # バージョン番号付きの so ファイルを削除対象に追加する。 # -CLEAN_FILES += $(TARGET).* +CLEAN_FILES += $(TARGET).* $(TOP_TARGET).* endif diff --git a/mk/link-so-rule.mk b/mk/link-so-rule.mk index 0c56e5c..1369c43 100644 --- a/mk/link-so-rule.mk +++ b/mk/link-so-rule.mk @@ -4,36 +4,41 @@ ifneq ($(strip $(NAME)),) ifeq ($(strip $(NAME).so),$(strip $(TARGET))) -ifneq ($(strip $(USE_SO_VERSION)),) -## -## バージョン番号付き so ファイル生成 -## +## ----------------------------------------------------------------------------- +## TOPディレクトリへのコピー +## ----------------------------------------------------------------------------- +$(TOP_TARGET): $(TARGET) +ifneq ($(strip $(HEADER_FILES)),) + $(CP) -f $(HEADER_FILES) $(TOPDIR)/include/ +endif + $(CP) -f -d $(TARGET)* $(TOPDIR)/lib/ + +ifneq ($(strip $(USE_SO_VERSION)),) +## ----------------------------------------------------------------------------- +## バージョン番号付き so ファイル生成 +## ----------------------------------------------------------------------------- # .so ファイル生成 (シンボリックリンク) $(TARGET): $(TARGET).$(MAJOR) $(LN) -fs $^ $@ - # .so.X ファイル生成 (シンボリックリンク) -$(TARGET).$(MAJOR): $(TARGET).$(VERSION) +$(TARGET).$(MAJOR): $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $(LN) -fs $^ $@ - # .so.X.X.X ファイル生成 -$(TARGET).$(VERSION): $(OBJS) - $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(VERSION) $^ $(LIBS) - +$(TARGET).$(MAJOR).$(MINOR).$(RELEASE): $(OBJS) + $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET).$(MAJOR) -o $(TARGET).$(MAJOR).$(MINOR).$(RELEASE) $^ $(LIBS) else -## +## ----------------------------------------------------------------------------- ## バージョン番号無し so ファイル生成 -## - +## ----------------------------------------------------------------------------- # .so ファイル生成 $(TARGET): $(OBJS) $(LINK) $(LDFLAGS) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $^ $(LIBS) - endif + endif endif diff --git a/mk/release-conf.mk b/mk/release-conf.mk new file mode 100644 index 0000000..a9bf6d9 --- /dev/null +++ b/mk/release-conf.mk @@ -0,0 +1,6 @@ +# ============================================================================== +# release 設定 +# ============================================================================== +ifeq ($(strip $(TOPDIR)),.) +CLEAN_DIRS += $(TOPDIR)/$(RELEASEDIR) +endif diff --git a/mk/release-rule.mk b/mk/release-rule.mk new file mode 100644 index 0000000..8862c62 --- /dev/null +++ b/mk/release-rule.mk @@ -0,0 +1,25 @@ +# ------------------------------------------------------------------------------ +# release ルール +# ------------------------------------------------------------------------------ +.PHONY: release +release: +ifeq ($(strip $(TOPDIR)),.) + $(MAKE) clean + $(MAKE) all + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/bin + $(MKDIR) -p $(TOPDIR)/$(RELEASEDIR)/lib +endif + @for subdir in $(SUBDIRS); do \ + $(MAKE) release -C $$subdir; \ + done +ifneq ($(strip $(TARGET)),) +ifeq ($(strip $(NAME).so),$(strip $(TARGET))) +# .so ファイル + $(CP) -d $(TARGET)* $(TOPDIR)/$(RELEASEDIR)/lib/ +endif +ifeq ($(strip $(NAME)),$(strip $(TARGET))) +# 実行ファイル + $(CP) $(TARGET) $(TOPDIR)/$(RELEASEDIR)/bin/ +endif +endif + diff --git a/mk/test-rule.mk b/mk/test-rule.mk new file mode 100644 index 0000000..ba154eb --- /dev/null +++ b/mk/test-rule.mk @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# test ルール +# ------------------------------------------------------------------------------ +.PHONY: test +test: + @for subdir in $(SUBDIRS); do \ + $(MAKE) test -C $$subdir; \ + done +ifeq ($(strip $(TARGET)),ut.exe) + $(MAKE) ut.exe + ./ut.exe +endif + diff --git a/modules/Makefile b/modules/Makefile new file mode 100644 index 0000000..2e43e7b --- /dev/null +++ b/modules/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= .. +RULEDIR ?= $(TOPDIR)/mk +NAME = +TARGET = $(NAME) +SUBDIRS = libcalc calc +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/Makefile b/modules/calc/Makefile new file mode 100644 index 0000000..da87bec --- /dev/null +++ b/modules/calc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = calc +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib -lcalc + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/calc/src/main.c b/modules/calc/src/main.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/calc/src/main.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/modules/libcalc/Makefile b/modules/libcalc/Makefile new file mode 100644 index 0000000..e9977e1 --- /dev/null +++ b/modules/libcalc/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = libcalc +TARGET = $(NAME).so +SUBDIRS = test +USE_SO_VERSION = y + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/include/calc.h b/modules/libcalc/include/calc.h new file mode 100644 index 0000000..e28d00f --- /dev/null +++ b/modules/libcalc/include/calc.h @@ -0,0 +1,8 @@ +#ifndef CALC_H +#define CALC_H + + +int add(int a, int b); + +#endif + diff --git a/modules/libcalc/src/calc.c b/modules/libcalc/src/calc.c new file mode 100644 index 0000000..059d557 --- /dev/null +++ b/modules/libcalc/src/calc.c @@ -0,0 +1,6 @@ +#include + +int add(int a, int b) +{ + return (a + b); +} diff --git a/modules/libcalc/test/Makefile b/modules/libcalc/test/Makefile new file mode 100644 index 0000000..dc6af03 --- /dev/null +++ b/modules/libcalc/test/Makefile @@ -0,0 +1,47 @@ +# ============================================================================== +# Makefile +# ============================================================================== +# +# TOPDIR : トップディレクトリ +# RULEDIR : Meke のルール一式が格納されているディレクトリ +# NAME : モジュール名 (拡張子を含めないこと) +# TARGET : モジュールファイル名 (拡張子を含めること) +# SUBDIR : サブディレクトリ (処理したい順に空白区切りで記述すること) +# +TOPDIR ?= ../../.. +RULEDIR ?= $(TOPDIR)/mk +NAME = ut.exe +TARGET = $(NAME) +SUBDIRS = +USE_SO_VERSION = + +# ------------------------------------------------------------------------------ +# *-cmd.mk : コマンド +# *-conf.mk : 設定 +# *-auto.mk : 自動設定 +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-cmd.mk +include $(RULEDIR)/*-conf.mk +include $(RULEDIR)/*-auto.mk +# ------------------------------------------------------------------------------ +# +# 以下、オプションを適宜変更してください。 +# + +INCLUDES += -I$(TOPDIR)/include +CFLAGS += +CXXFLAGS += +LDFLAGS += +LIBS += -L$(TOPDIR)/lib + +CLEAN_FILES += +CLEAN_DIRS += + +.DEFAULT_GOAL := all + +# ------------------------------------------------------------------------------ +# *-rule : ルール +# ------------------------------------------------------------------------------ +include $(RULEDIR)/*-rule.mk +# ------------------------------------------------------------------------------ + diff --git a/modules/libcalc/test/src/test.c b/modules/libcalc/test/src/test.c new file mode 100644 index 0000000..4265469 --- /dev/null +++ b/modules/libcalc/test/src/test.c @@ -0,0 +1,15 @@ +#include + +#include "calc.h" + + +int main(void) +{ + int a = 5; + int b = 100; + int c = add(a, b); + printf("%d\n", c); + return 0; +} + + diff --git a/src/test.c b/src/test.c deleted file mode 100644 index 4265469..0000000 --- a/src/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#include "calc.h" - - -int main(void) -{ - int a = 5; - int b = 100; - int c = add(a, b); - printf("%d\n", c); - return 0; -} - -