用makefile将多个不同C语言文件生成二进制文件并能放到Stm32中运行
时间: 2024-02-18 14:02:16 浏览: 83
makefile编译多个文件
要使用Makefile将多个不同的C语言文件编译成Stm32可执行文件,需要在Makefile中定义多个源文件和目标文件,并将它们编译链接到一起生成可执行文件。以下是一个示例Makefile,用于将多个不同的C语言文件编译成Stm32可执行文件:
```
CC = arm-none-eabi-gcc
CFLAGS = -Wall -Wextra -std=c99 -O2 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16
LDFLAGS = -T stm32.ld -nostartfiles
SOURCES = main.c file1.c file2.c
OBJECTS = $(SOURCES:.c=.o)
EXECUTABLE = myprogram
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJECTS) $(EXECUTABLE)
```
在这个Makefile中,定义了三个变量:
- `SOURCES`:源文件的路径和名称,包括main.c、file1.c和file2.c;
- `OBJECTS`:目标文件的路径和名称,根据源文件的不同生成不同的目标文件,例如main.o、file1.o和file2.o;
- `EXECUTABLE`:生成的可执行文件的路径和名称,例如myprogram。
在Makefile中定义了以下几个规则:
- `all`:默认生成规则,依赖于源代码文件和目标文件,生成可执行文件;
- `$(EXECUTABLE)`:生成可执行文件的规则,依赖于目标文件,使用gcc将目标文件链接成可执行文件;
- `.c.o`:将C语言源文件编译成目标文件的规则,依赖于源文件,使用gcc将源文件编译成目标文件;
- `clean`:清理生成的目标文件和可执行文件。
使用这个Makefile生成Stm32可执行文件的步骤和前面的示例相同。需要注意的是,在编写C语言代码时,需要使用Stm32的相关库函数,并将这些库函数的源代码添加到Makefile中进行编译链接。通常情况下,这些库函数的源代码会被组织成一个库文件(例如libstm32f4xx.a),需要在Makefile中指定库文件的路径和名称,并将它们链接到可执行文件中。
阅读全文