昨日私は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)』
は、私は、ターゲットの特定の変数のスコープとして私的使用すべきであることを知っているが、私は、新しいバージョンを作成してコンパイル/ダウンロードするには持っているより...
このような構成を構築するための推奨方法を知りたいと思います。 誰かが単純な(そして完全な)例を提供できるのでしょうか?
ありがとうございます! マイケル
ありがとうございます。この場合、make debug light_debug releaseを呼び出すことはできません。ターゲットに基づいたソリューションはありますか? – user3118472
あなたは 'make config = debug && make config = release'を呼び出すことができます。とにかく、 'make debug release'の値は大したものではありません。 – igagis