2016-05-22 9 views
2

マイプロジェクトの構造は次のようになります。ARMプロジェクトのメイクファイルを書く

. 
├── build 
├── src 
| ├── rbpi 
| | └── gpio.h 
| ├── boot.c 
| ├── boot.s 
| └── kernel.c 
└── linker.ld 

これはLEDを点滅させ、簡単なラズベリーパイカーネルです! 私は現在、それを構築するために次の内容の簡単なbatファイルを使用します。

arm-none-eabi-gcc -g -O0 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -nostartfiles -Wl,-T,linker.ld src/kernel.c src/boot.c src/boot.s -o build/kernel.elf 
arm-none-eabi-objcopy build/kernel.elf -O binary build/kernel7.img 

私はこのプロジェクトにファイルを追加しますので、私は私の「buildscript」にすべてのファイルを追加する必要があります。
可能であれば、私はmakefileを使用したいと思います。

次の「ルール」が必要な場合、私のメイクファイルはどのように見えますか?コンパイル前

  • buildディレクトリからすべての*.elf*.imgファイルをクリーンアップ。
  • srcディレクトリからすべて*.c*.sのファイルをコンパイルします。
  • kernel.elfファイルをbuildディレクトリに出力します。
  • リンカースクリプトlinker.ldを使用してください。
  • コンパイル後、objcopyを実行してバイナリファイルを生成します。典型的なMakefileように見えるかもしれ

答えて

2

...素敵な簡単なメイクファイルをここに作るGNUについてのドキュメントがあります待っ:だから、あなたのために開始するための簡単な1がかもしれ http://www.gnu.org/software/make/manual/make.html#Simple-Makefile

を:

SRC := $(wildcard src/*.c src/*.s) 
CFLAGS := -g -O0 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -nostartfiles -Wl,-T,linker.ld 

all: build/kernel.img 

build/kernel.elf: $(SRC) 
    arm-none-eabi-gcc $(CFLAGS) $(SRC) -o [email protected] 


%.img: %.elf 
    arm-none-eabi-objcopy $< -O binary [email protected] 

clean: 
    rm -f build/*.elf build/*.img 

(ここでは4つのスペースではなく、タブでレシピを作成する必要があります。ファイルを理解することが重要です。コピーペーストは機能しません)

コンパイルする前にelfとimgファイルを実際に削除する必要はありません。それは、GNU Makeロールがファイルの変更時に再構築するかどうかを知るためです。

ここでそれが働いて、次のとおりです。

$ tree 
. 
├── build 
├── Makefile 
└── src 
    ├── boot.c 
    ├── boot.s 
    └── kernel.c 

$ make 
arm-none-eabi-gcc -g -O0 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -nostartfiles -Wl,-T,linker.ld src/boot.c src/kernel.c src/boot.s -o build/kernel.elf 
arm-none-eabi-objcopy build/kernel.elf -O binary build/kernel.img 

$ tree 
. 
├── build 
│   ├── kernel.elf 
│   └── kernel.img 
├── Makefile 
└── src 
    ├── boot.c 
    ├── boot.s 
    └── kernel.c 

$ make 
make: Nothing to be done for 'all'. 

$ touch src/boot.C# If I touch a file, make will have to rebuild evrything: 

$ make 
arm-none-eabi-gcc -g -O0 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -nostartfiles -Wl,-T,linker.ld src/boot.c src/kernel.c src/boot.s -o build/kernel.elf 
arm-none-eabi-objcopy build/kernel.elf -O binary build/kernel.img 

あなたは本当にいいですドキュメントを見てみる必要があります:http://www.gnu.org/software/make/manual/make.htmlあなたがする必要があります任意の変更のためにStackOverflowの上で尋ねることができなくなりますこの "ブートストラップメークファイル"から始まってmakefile上でやってください。マニュアルを参考にして段階的に学習できるように修正する必要があります。

+0

ありがとうございます! :) –

関連する問題