2017-07-18 6 views
0

昨日私はMakefileを書いてうまく動作するProgrammをビルドしました。 異なるビルド構成を構築しようとしています。異なるビルド構成を使ってMakeを使ってプログラムをビルドするには?

ソースファイルと出力パスのリストが異なるさまざまな構成を構築するための推奨される方法は何ですか?

私は、ターゲット固有の変数...コンパイラツールチェーンの

実行可能ファイルを使用しようとしました。

コンパイラ:= CCRL LINKER:= RLINK ASSEMBLER:= ASRL

のdevice_file:* .dファイルを生成するために使用される= DR5F100LL.DVF

コンパイラフラグ。

を-Onothing = \ -MM \ -MP \ -cpu = S2 \ -dev = "$(device_fileは)" \ -no_warning_num = 11179,11180 \ -g \ :

DFLAGS

cソースファイルから* .objファイルを生成するために使用されるコンパイラフラグ。

CFLAGS:= \ -cpu = S2 \ -c \ -dev = "$(device_fileは)" \ -no_warning_num = 11179,11180 \ -g \

コンパイラフラグを-Onothingアセンブラファイルから* .objファイルを生成するために使用されます。

ASMFLAGS:= $(CFLAGS)

リンカーフラグ

LDFLAGS:= \ -library = "$ {COMPILER_PATH} /lib/rl78cm4s.lib" \ -library = "$ {COMPILER_PATH } /lib/rl78cm4r.lib "\ -library =" ./ FFT_Library/libfft_rl78g13.lib」\ -nooptimize \ -entry = _start \ -security_id = 00000000000000000000 \ -ocdbg = 04 \ -user_opt_byte = EEFFE9 \ -debug \ -nocompress \ -memory =ハイ\ -VECTN = 2 = FFFF \ -rom = .dataセクション= .dataR \ -rom = .SDATA = .sdataR \ -nomessage \ -device = "$(device_fileは)" \ -nologo \

-start = .const、の.text、.RLIB、.SLIB、.textf、.constf、.DATA、.SDATA/03000、.dataR、.bssの/ 0F7F00、.sdataR、 = \:.sbssセクション/ 0FFE20

は、ディレクトリに

C_INCSを含めます-I $ {COMPILER_PATH}/inc \ ...

Cソースファイルを使用してプログラムをビルドします。

C_SRCS_FFT_TEST:= \ CodeGenerator/r_cg_cgc.c \ ...

C_SRCS_HISTORY_TEST:= \ CodeGenerator/r_cg_cgc.c \ ...

C_SRCS_IOLINK_TEST:= \ CodeGenerator/r_cg_cgc .c \ ...

プログラムのビルドに使用されるアセンブラファイル。

ASM_SRCS:ビルド結果の= \ ...

ルートディレクトリ。

OUT_ROOT_DIR:= PUBLISH_ROOT_DIRを構築:=

.SECONDEXPANSION公開:ビルド構成の

名前を。

BUILD_CONFIG =不明

OUT_DIR = $(OUT_ROOT_DIR)/ $(BUILD_CONFIG) PUB_DIR = $(PUBLISH_ROOT_DIR)/ $(BUILD_CONFIG)

生成されたファイルのファイルパスを決定します。

OBJS = $(patsubst%.C、$(OUT_DIR)/%。OBJ、$(C_SRCS)) OBJS + = $(patsubst%.ASM、$(OUT_DIR)/%。OBJ、$(ASM_SRCS )) DEPS = $(OBJS:.obj = .d)

出力ファイルのファイル名。

OUT_FILE = $(PUB_DIR)/MyFile.abs MAP_FILE = $(OUT_DIR)/MyFile.map

.PHONY:ビルド定義 ビルド定義:FFT-テスト履歴テストiolinkテスト

FFT-テスト:BUILD_CONFIG = FFT_Test FFT-テスト:C_SRCS = $(C_SRCS_FFT_TEST) .PHONY:FFT-テスト FFT-テスト:$$(OUT_FILE)

史テスト:BUILD_CONFIG = History_Test 履歴テスト:C_SRCS = $(C_SRCS_H ISTORY_TEST) .PHONY:履歴テスト 履歴テスト: @echo -e "Building $(BUILD_CONFIG)。"

iolinkテスト:BUILD_CONFIG = IOLink_Test iolinkテスト:C_SRCS = $(C_SRCS_IOLINK_TEST) .PHONY:iolinkテスト iolinkテスト: "$ビル(BUILD_CONFIG)" @echo -e

.PHONY:すべて すべて:事前にビルド$(OUT_FILE)ビルド後

.PHONY:事前に構築 ビルド前: "実行前のビルドターゲット" @echo -e

。電話:ポストビルド ポストビルド: @echo -e "ビルド後のターゲットを実行する"

.PHONY:clean clean: @echo -e "クリーンターゲットを実行する"
@rm -f -v $(OUT_DIR)/LinkerSubCommand.tmp @rm -f -v $(OBJS) @rm -f -v $(DEPS) @rm -f -v $(OUT_FILE) @rm -f -v $(MAP_FILE)

ACソースファイルから依存ファイルを作成する方法。

$(OUT_DIR)/%D:%.C @echo 'ビルd個のファイル:$ <' @mkdir -p "$(DIRの$ @)" $(コンパイラ)$(DFLAGS)$ (C_INCS)-o "$(@:%obj =%。d)" -MT = "$ @" -MT = "$(@:%obj =%.d)" "$ <"

asmファイルから依存関係ファイルを作成する方法。

$(OUT_DIR)/%D:%.ASM @echo 'ビルd個のファイル:$ <' @mkdir -p "$(DIRの$ @)" $(コンパイラ)$(DFLAGS)$ (C_INCS)-o "$(@:%obj =%。d)" -MT = "$ @" -MT = "$(@:%obj =%.d)" "$ <"

ACソースファイルからオブジェクトファイルを構築する方法。

$(OUT_DIR)/%OBJ:%.C @echo 'ビルOBJファイル:$ <' @mkdir -p "$(DIRの$ @)" $(コンパイラ)$(CFLAGS)$ (C_INCS)-o "$ @を" "$ <" @echo -e $(@:%= - 入力= \ "%の\")>>どのように構築する$(OUT_DIR)/LinkerSubCommand.tmp

オブジェクトファイルはasmファイルから取得します。

$(OUT_DIR)/%OBJ:%.ASM @echo 'ビルASMファイル:$ <' @mkdir -p "$(DIRの$ @)" $(コンパイラ)$(CFLAGS)$ (C_INCS)-o "$ @を" "$ <" @echo -e $(@:%= - 入力= \ "%の\")>> $$(OUT_DIR)/LinkerSubCommand.tmp

# $(obj):%.obj:%.c $(DEPS)

すべてのオブジェクトファイルから出力ファイルを作成する方法。

%.abs:$(OBJS) @echo -e "Building $(BUILD_CONFIG)。" @echo -e "出力ディレクトリは$(OUT_DIR)です。" @echo -e "公開ディレクトリは$(PUB_DIR)です。" @echo -e "ソースファイルは$(C_SRCS)です。" @echo -e "アセンブラファイルは$(ASM_SRCS)です。" @echo -e "生成されるオブジェクトファイルは$(OBJS)です。" @echo -e "ビルディング出力ファイルは$ @です。"
@mkdir -p "$(PUB_DIR)" @mkdir -p "$(OUT_DIR)" $(LINKER)$(LDFLAGS)-subcommand = "$(OUT_DIR)/LinkerSubCommand.tmp" -list = "$ (MAP_FILE)」-output = 『$(OUT_FILE)』

は、私は、ターゲットの特定の変数のスコープとして私的使用すべきであることを知っているが、私は、新しいバージョンを作成してコンパイル/ダウンロードするには持っているより...

このような構成を構築するための推奨方法を知りたいと思います。 誰かが単純な(そして完全な)例を提供できるのでしょうか?

ありがとうございます! マイケル

答えて

0

のMakefile:

make confg=debug 

または

make config=light_debug 

または

make config=release 
0:

ifeq ($(config), debug) 
    CFLAGS := -DDEBUG -g 
    OUT_PATH := ./build/debug/ 
else ifeq ($(config), light_debug) 
    CFLAGS := -g 
    OUT_PATH := ./build/light_debug/ 
else #release config by default 
    OUT_PATH := ./build/release 
endif 

#... 

その後make invokationはこのようなものです

+0

ありがとうございます。この場合、make debug light_debug releaseを呼び出すことはできません。ターゲットに基づいたソリューションはありますか? – user3118472

+0

あなたは 'make config = debug && make config = release'を呼び出すことができます。とにかく、 'make debug release'の値は大したものではありません。 – igagis

関連する問題