Gcc 为ARM项目编写makefile
我的项目结构如下所示:Gcc 为ARM项目编写makefile,gcc,makefile,Gcc,Makefile,我的项目结构如下所示: . ├── 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 -m
.
├── 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
由于我将向该项目添加更多文件,因此我必须将每个文件附加到我的“构建脚本”中。如果可能,我想使用
makefile
如果我需要以下“规则”,我的makefile应该是什么样子?
- 编译前,从
目录中清除所有build
和*.elf
文件*.img
- 从
目录编译所有src
和*.c
文件*.s
- 将
文件输出到kernel.elf
目录中build
- 使用链接器脚本
linker.ld
- 编译后,运行
生成二进制文件objcopy
- 一个典型的
生成文件可能看起来像。。。等等,这里有一个关于GNU Make的文档,其中包含一个很好的简单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 $@
%.img: %.elf
arm-none-eabi-objcopy $< -O binary $@
clean:
rm -f build/*.elf build/*.img
你真的应该看一看非常好的文档:你将无法要求stackoverflow对你的makefile进行任何修改,从这个“引导makefile”开始,你应该能够修改它以逐步学习,并将文档作为参考
$ 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