ソースから.oファイルのリストを作成し、別のmakeターゲット、セットアップリンクなどで作成するMakefileを作成しようとしています。現在、Makefileは次のようになっています。
CC=arm-none-eabi-gcc
vpath %.c src src/peripherals
vpath %.o out
OUT_DIR = out
CFLAGS = -DUSE_STDPERIPH_DRIVER
CFLAGS += -c -fmessage-length=0 -g3 -gdwarf-2 -O0 -Wall -Wa,-adhlns="$@.lst"
CFLAGS += -mthumb -mcpu=cortex-m4
CFLAGS += -MMD -MP -MF"$@.d" -MT"$@.d"
CFLAGS += -Iinc -Iinc/cmsis -Iinc/peripherals -Iinc/stm32f4xx
SRC = misc.c stm32f4xx_adc.c stm32f4xx_can.c stm32f4xx_crc.c stm32f4xx_cryp.c stm32f4xx_cryp_aes.c \
stm32f4xx_cryp_des.c stm32f4xx_cryp_tdes.c stm32f4xx_dac.c stm32f4xx_dbgmcu.c stm32f4xx_dcmi.c stm32f4xx_dma.c \
stm32f4xx_exti.c stm32f4xx_flash.c stm32f4xx_fsmc.c stm32f4xx_gpio.c stm32f4xx_hash.c stm32f4xx_hash_md5.c \
stm32f4xx_hash_sha1.c stm32f4xx_i2c.c stm32f4xx_iwdg.c stm32f4xx_pwr.c stm32f4xx_rcc.c stm32f4xx_rng.c \
stm32f4xx_rtc.c stm32f4xx_sdio.c stm32f4xx_spi.c stm32f4xx_syscfg.c stm32f4xx_tim.c stm32f4xx_usart.c \
stm32f4xx_wwdg.c
OBJ = $(SRC:.c=.o)
%.o : %.c
$(CC) -c -o $@ $< $(CFLAGS)
all: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
私はこれがひどく間違っていることを知っています。私はMakefileでの作業の専門家ではありませんが、プロセスを少しよく理解するのに役立つので、これを正しくしたいと思います。
基本的に必要なのは、$(SRC)内の.cファイルのリストを取得し、それらを.oファイルのリストにビルドしてlib/outに出力することです。
私のターゲットと%.o...ルールがひどく台無しになっていることを知っています。all:targetを取得して個々の.oファイルをビルドするにはどうすればよいですか。
これが参考のためのプロジェクト構造です。私が取り組んでいるMakefileは./libフォルダーにあります。
.
├── Makefile
├── inc
│ └── main.h
├── lib
│ ├── Makefile
│ ├── inc
│ │ ├── cmsis
│ │ │ ├── arm_common_tables.h
│ │ │ ├── ...
│ │ ├── peripherals
│ │ │ ├── misc.h
│ │ │ ├── stm32f4xx_adc.h
│ │ │ ├── ...
│ │ └── stm32f4xx
│ │ ├── stm32f4xx.h
│ │ ├── stm32f4xx_conf.h
│ │ └── system_stm32f4xx.h
│ ├── src
│ │ └── peripherals
│ │ ├── misc.c
│ │ ├── stm32f4xx_adc.c
│ │ ├── ...
│ ├── startup_stm32f4xx.s
│ └── ~Makefile
├── readme.md
├── src
│ └── main.c
├── stm32f4.ld
├── stm32f4discovery.cfg
├── system_stm32f4xx.c
└── ~Makefile