Prog/make
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#c7c4b126]
#contents();
/////////////////////////////////////////////////////////...
* 自動変数 [#g4e6722a]
|~自動変数 |~意味 |~...
|$@ |ターゲットのファイル名 | |
|$% |ターゲットファイルがアーカイブメンバだったと...
|$< |最初の依存するファイル名 | |
|$? |ターゲットより新しい全ての依存ファイル名 | |
|$^ |全ての依存するファイル名 | |
|$+ |Makefile と同じ順番の依存するファイル名 | |
|$* |サフィックスを除いたターゲット名 | |
/////////////////////////////////////////////////////////...
* デバッグシンボルの分離 [#o121be49]
** 目的 [#uaa1a8ea]
- 生成した実行形式にデバッグ情報を取り除くことにより、ク...
- デバッグシンボルを取り除いてもデバッグが可能となるよう...
//=======================================================...
** Makefile の実施例 [#z5786ffe]
SHELL = /bin/sh
PROG = OOO
PROG_SYMBOL = $(PROG).sym
CXXFLAGS = \
-Wall \
LDFLAGS = \
-lstdc++ \
CXXFLAGS_DEBUG = -ggdb -D_DEBUG_
CXXFLAGS_RELEASE = -O2
LDFLAGS_DEBUG =
LDFLAGS_RELEASE =
SRCSCPP = \
a.C \
b.C \
c.C \
main.C \
SRCS = $(SRCSCPP)
OBJCPP = $(SRCSCPP:.C=.o)
OBJS = $(OBJCPP)
# Rules & Program stuff
MAKE = make
CXX = g++
CPP = g++ -E
RM = /bin/rm
RMF = $(RM) -f
CP = /bin/cp
AR = /usr/bin/ar
ARQ = $(AR) -q
STRIP = /usr/bin/strip
OBJCOPY = /usr/bin/objcopy
OBJCOPY_ONLY_KEEP_DEBUG = $(OBJCOPY) --only-keep-debug
ROOT_DEV = CURRENT
all:
@echo "WARNING: Available make target is: dbg rel clean";
dbg: build-dbg strip-symbol
rel: build-rel strip-symbol
clean :
$(RMF) $(OBJS) $(PROG) $(PROG_SYMBOL)
build-dbg: LDFLAGS += $(LDFLAGS_DEBUG)
build-dbg: CXXFLAGS += $(CXXFLAGS_DEBUG)
build-dbg: $(PROG)
build-rel: LDFLAGS += $(LDFLAGS_RELEASE)
build-rel: CXXFLAGS += $(CXXFLAGS_RELEASE)
build-rel: $(PROG)
$(PROG) : $(OBJS)
$(CXX) -o $(PROG) $(OBJS) $(CXXFLAGS) $(LDFLAGS)
strip-symbol: $(PROG)
@echo "Stripping symbols"
$(OBJCOPY_ONLY_KEEP_DEBUG) $(PROG) $(PROG_SYMBOL)
$(STRIP) $(PROG)
- 引数なしで make した場合、最初のターゲットが実行される...
- "make dbg" 若しくは "make rel" とした場合、プログラムが...
/////////////////////////////////////////////////////////...
* 関数・制御 [#v17c6436]
//=======================================================...
** call [#func_call]
- 書式
$(call <variable>,<param1>,<param2>,…)
- パラメータ化した関数を作る。
- call で呼び出す「関数」にあたるのは <variable> になる。...
-- 例
test_func = $(1) $(2)
# $(1), $(2) は引数となる。
# 呼び出し:
$(call test_func,12,14)
//=======================================================...
** foreach [#func_foreach]
- 書式
$(foreach <ITERATOR>,$(配列), 処理)
-- 複数の処理を記述することも出来る。但し改行する場合は行...
$(foreach <ITERATOR>, $(配列) \
処理1 \
処理2 \
... \
)
//=======================================================...
** info [#func_info]
- 任意の文字列や変数の値を表示する
- 書式
$(info 文字列や変数など)
//=======================================================...
** subst [#func_subst]
- 任意の文字列を検索して置き換える
- 書式
$(subst <置換対象の文字列>,<置換後の文字列>,<元の文字列>)
- 例
LIBFILE := libhoge.a
SOLIB := $(subst .a,.so,$(LIBFILE)) # SOLIB には libh...
//=======================================================...
** 分岐 [#ifeq]
- ifeq
-- 例:変数 HOGE の値が 1 の場合、 CXXFLAGS に -D__CONFIG...
ifeq ($(HOGE),1)
CXXFLAGS += -D__CONFIG_A__
endif
- ifdef
-- とある変数が定義されている場合、その値が何かにかかわら...
-- 例:変数 FOO が定義されている場合に、CXXFLAGS に -D__C...
ifdef FOO
CXXFLAGS += -D__CONFIG_A__
endif
/////////////////////////////////////////////////////////...
* 全ての変数の値を知る [#q6a91896]
- 全ての変数は、$(.VARIABLES) に格納されているので、これ...
@$(foreach var,$(.VARIABLES),$(info $var=$($var)))
/////////////////////////////////////////////////////////...
* シェルコマンドの結果を得る [#e84175b0]
- date などのコマンドの実行結果を変数に格納するには以下の...
# date の実行結果を変数 HOGE_DATE に格納する
HOGE_DATE := $(shell date +%F)
/////////////////////////////////////////////////////////...
* 参考リンク [#r2948aa7]
- [[Makefileの関数>https://qiita.com/chibi929/items/b8c5f...
終了行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#c7c4b126]
#contents();
/////////////////////////////////////////////////////////...
* 自動変数 [#g4e6722a]
|~自動変数 |~意味 |~...
|$@ |ターゲットのファイル名 | |
|$% |ターゲットファイルがアーカイブメンバだったと...
|$< |最初の依存するファイル名 | |
|$? |ターゲットより新しい全ての依存ファイル名 | |
|$^ |全ての依存するファイル名 | |
|$+ |Makefile と同じ順番の依存するファイル名 | |
|$* |サフィックスを除いたターゲット名 | |
/////////////////////////////////////////////////////////...
* デバッグシンボルの分離 [#o121be49]
** 目的 [#uaa1a8ea]
- 生成した実行形式にデバッグ情報を取り除くことにより、ク...
- デバッグシンボルを取り除いてもデバッグが可能となるよう...
//=======================================================...
** Makefile の実施例 [#z5786ffe]
SHELL = /bin/sh
PROG = OOO
PROG_SYMBOL = $(PROG).sym
CXXFLAGS = \
-Wall \
LDFLAGS = \
-lstdc++ \
CXXFLAGS_DEBUG = -ggdb -D_DEBUG_
CXXFLAGS_RELEASE = -O2
LDFLAGS_DEBUG =
LDFLAGS_RELEASE =
SRCSCPP = \
a.C \
b.C \
c.C \
main.C \
SRCS = $(SRCSCPP)
OBJCPP = $(SRCSCPP:.C=.o)
OBJS = $(OBJCPP)
# Rules & Program stuff
MAKE = make
CXX = g++
CPP = g++ -E
RM = /bin/rm
RMF = $(RM) -f
CP = /bin/cp
AR = /usr/bin/ar
ARQ = $(AR) -q
STRIP = /usr/bin/strip
OBJCOPY = /usr/bin/objcopy
OBJCOPY_ONLY_KEEP_DEBUG = $(OBJCOPY) --only-keep-debug
ROOT_DEV = CURRENT
all:
@echo "WARNING: Available make target is: dbg rel clean";
dbg: build-dbg strip-symbol
rel: build-rel strip-symbol
clean :
$(RMF) $(OBJS) $(PROG) $(PROG_SYMBOL)
build-dbg: LDFLAGS += $(LDFLAGS_DEBUG)
build-dbg: CXXFLAGS += $(CXXFLAGS_DEBUG)
build-dbg: $(PROG)
build-rel: LDFLAGS += $(LDFLAGS_RELEASE)
build-rel: CXXFLAGS += $(CXXFLAGS_RELEASE)
build-rel: $(PROG)
$(PROG) : $(OBJS)
$(CXX) -o $(PROG) $(OBJS) $(CXXFLAGS) $(LDFLAGS)
strip-symbol: $(PROG)
@echo "Stripping symbols"
$(OBJCOPY_ONLY_KEEP_DEBUG) $(PROG) $(PROG_SYMBOL)
$(STRIP) $(PROG)
- 引数なしで make した場合、最初のターゲットが実行される...
- "make dbg" 若しくは "make rel" とした場合、プログラムが...
/////////////////////////////////////////////////////////...
* 関数・制御 [#v17c6436]
//=======================================================...
** call [#func_call]
- 書式
$(call <variable>,<param1>,<param2>,…)
- パラメータ化した関数を作る。
- call で呼び出す「関数」にあたるのは <variable> になる。...
-- 例
test_func = $(1) $(2)
# $(1), $(2) は引数となる。
# 呼び出し:
$(call test_func,12,14)
//=======================================================...
** foreach [#func_foreach]
- 書式
$(foreach <ITERATOR>,$(配列), 処理)
-- 複数の処理を記述することも出来る。但し改行する場合は行...
$(foreach <ITERATOR>, $(配列) \
処理1 \
処理2 \
... \
)
//=======================================================...
** info [#func_info]
- 任意の文字列や変数の値を表示する
- 書式
$(info 文字列や変数など)
//=======================================================...
** subst [#func_subst]
- 任意の文字列を検索して置き換える
- 書式
$(subst <置換対象の文字列>,<置換後の文字列>,<元の文字列>)
- 例
LIBFILE := libhoge.a
SOLIB := $(subst .a,.so,$(LIBFILE)) # SOLIB には libh...
//=======================================================...
** 分岐 [#ifeq]
- ifeq
-- 例:変数 HOGE の値が 1 の場合、 CXXFLAGS に -D__CONFIG...
ifeq ($(HOGE),1)
CXXFLAGS += -D__CONFIG_A__
endif
- ifdef
-- とある変数が定義されている場合、その値が何かにかかわら...
-- 例:変数 FOO が定義されている場合に、CXXFLAGS に -D__C...
ifdef FOO
CXXFLAGS += -D__CONFIG_A__
endif
/////////////////////////////////////////////////////////...
* 全ての変数の値を知る [#q6a91896]
- 全ての変数は、$(.VARIABLES) に格納されているので、これ...
@$(foreach var,$(.VARIABLES),$(info $var=$($var)))
/////////////////////////////////////////////////////////...
* シェルコマンドの結果を得る [#e84175b0]
- date などのコマンドの実行結果を変数に格納するには以下の...
# date の実行結果を変数 HOGE_DATE に格納する
HOGE_DATE := $(shell date +%F)
/////////////////////////////////////////////////////////...
* 参考リンク [#r2948aa7]
- [[Makefileの関数>https://qiita.com/chibi929/items/b8c5f...
ページ名: