2017-05-21 11 views
0

は私が私のメイクで、このルールを持って働いていない、動作しますが、がそれを見つけられませんでしたします:がそれらを使用しますが作る、Makefileは:明示的なエントリは、ワイルドカード%が

$(BUILDDIR)%.o : $(BUILDDIR)%.bin 
    @echo 
    $(OBJCOPY) -I binary -O elf32-avr --redefine-sym _binary_$*_bin_start=$* --redefine-sym _binary_$*_bin_end=$*_end $< [email protected] 

私はそれを明示的に行う場合(ビルド/ rom1.oを求め、/ rom2.oを構築; BUILDDIRは= /ビルド)

$(BUILDDIR)rom1.o : $(BUILDDIR)rom1.bin 
    @echo 
    $(OBJCOPY) -I binary -O elf32-avr --redefine-sym _binary_rom1_bin_start=rom1 --redefine-sym _binary_rom1_bin_end=rom1_end $< [email protected] 

$(BUILDDIR)rom2.o : $(BUILDDIR)rom2.bin 
    @echo 
    $(OBJCOPY) -I binary -O elf32-avr --redefine-sym _binary_rom2_bin_start=rom2 --redefine-sym _binary_rom2_bin_end=rom2_end $< [email protected] 

誰もが私の最初の試みで、ワイルドカードでいただきました!間違ったヒントを持っていますか?

編集: makeのバージョンは、Ubuntu 16.04で動作します。

make: *** No rule to make target 'build/rom1.o', needed by 'build/rom1.elf'. Stop. 
+0

あなたは「makeがそれを見つけられませんでした」で何を意味するかを定義してください。 'make 'を実行したとき何が起こったのですか?また、使用しているメールのフレーバーとバージョン、使用しているオペレーティングシステム(使用している場合もあります)を必ず指定してください。 – MadScientist

+0

@MadScientist上記の投稿を更新しました –

+0

ありがとうございました。あなたが提供したメークファイルの部分に何か間違っているとは思わないので、問題は別の場所にあるはずです。あなたは 'make -d'を実行する必要があります(多くの出力を生成します)、パターンルールと一致する部分を探し、makeがそれにマッチしない理由を確認します。 'build/rom1.bin'ファイルが存在すると仮定しています。 – MadScientist

答えて

0

はのは問題を単純化してみましょうこれはあなたのファイル構造であれば... ...

. 
├── Makefile 
└── build 
    ├── rom1.bin 
    └── rom2.bin 

この

:ワイルドカードを使用して実行しようとしたとき これはmakeからのエラー・メッセージですあなたのMakefileは...

BUILDDIR := build/ 

$(BUILDDIR)%.o: $(BUILDDIR)%.bin 
    touch [email protected] 

、あなたの結果のファイル構造がなり、$ make build/rom{1,2}.o実行...

. 
├── Makefile 
└── build 
    ├── rom1.bin 
    ├── rom1.o 
    ├── rom2.bin 
    └── rom2.o 
関連する問題