裸机STM32
Bare metal STM32
我有一个使用STM32F103C8T6的项目。它有树:
__main.c
|__main.h
|__led.c
|__led.h
|__stm32f1xx_startup.c
|__Makefile
我正在使用 arm-none-eabi-gcc 来编译这个项目。 Makefile
如下:
CC = arm-none-eabi-gcc
MARCH = cortex-m3
CFLAGS = -c -mcpu=$(MARCH) -mthumb -std=gnu11 -Wall -O0
RM = rm -rf
OBJS = $(patsubst %.c,%.o,$(wildcard *.c))
INCS = $(wildcard *.h)
all: $(OBJS)
$(CC) $(CFLAGS) $< -o $@
%.o: %.c %.h
$(CC) $(CFLAGS) $< -o $@
.PHONY: clean
clean:
$(RM) *.o all
当我通过 VS Code 的终端执行 运行 make
命令时,它不会生成执行文件并有这样的警告:
minh@Minh:~/Workspaces/Stm32/BeraMetal$ make
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 main.c -o main.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 -c -o stm32f1xx_startup.o stm32f1xx_startup.c
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 led.c -o led.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 main.o -o all
arm-none-eabi-gcc: warning: main.o: linker input file unused because linking not done
请告诉我如何修复它?提前致谢。
您使用相同的标志将两个目标文件编译成目标文件,就像您尝试 link 将目标文件放在一起时一样。
问题是 linking 命令将使用 -c
标志,用于构建目标文件。
您需要将编译标志和 linker 标志分开。或者至少不在 CFLAGS
.
中指定 -c
how I can fix it?
不要将 -c
传递到链接阶段。此外,您必须将所有对象传递给链接器。
CFLAGS = -mcpu=$(MARCH) -mthumb -std=gnu11 -Wall -O0
all: $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
%.o: %.c %.h
$(CC) $(CFLAGS) -c $< -o $@
考虑使用比爷爷 Make 更新的东西 - CMake
Scons
Meson
.
我有一个使用STM32F103C8T6的项目。它有树:
__main.c
|__main.h
|__led.c
|__led.h
|__stm32f1xx_startup.c
|__Makefile
我正在使用 arm-none-eabi-gcc 来编译这个项目。 Makefile
如下:
CC = arm-none-eabi-gcc
MARCH = cortex-m3
CFLAGS = -c -mcpu=$(MARCH) -mthumb -std=gnu11 -Wall -O0
RM = rm -rf
OBJS = $(patsubst %.c,%.o,$(wildcard *.c))
INCS = $(wildcard *.h)
all: $(OBJS)
$(CC) $(CFLAGS) $< -o $@
%.o: %.c %.h
$(CC) $(CFLAGS) $< -o $@
.PHONY: clean
clean:
$(RM) *.o all
当我通过 VS Code 的终端执行 运行 make
命令时,它不会生成执行文件并有这样的警告:
minh@Minh:~/Workspaces/Stm32/BeraMetal$ make
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 main.c -o main.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 -c -o stm32f1xx_startup.o stm32f1xx_startup.c
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 led.c -o led.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -std=gnu11 -Wall -O0 main.o -o all
arm-none-eabi-gcc: warning: main.o: linker input file unused because linking not done
请告诉我如何修复它?提前致谢。
您使用相同的标志将两个目标文件编译成目标文件,就像您尝试 link 将目标文件放在一起时一样。
问题是 linking 命令将使用 -c
标志,用于构建目标文件。
您需要将编译标志和 linker 标志分开。或者至少不在 CFLAGS
.
-c
how I can fix it?
不要将 -c
传递到链接阶段。此外,您必须将所有对象传递给链接器。
CFLAGS = -mcpu=$(MARCH) -mthumb -std=gnu11 -Wall -O0
all: $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
%.o: %.c %.h
$(CC) $(CFLAGS) -c $< -o $@
考虑使用比爷爷 Make 更新的东西 - CMake
Scons
Meson
.