2013-02-26 6 views
1

Я пытаюсь написать Makefile, который будет создавать список .o-файлов из исходного кода, а затем в отдельную цель make, установить ссылку и т. Д. Мой Makefile в настоящее время выглядит как это:Создайте отдельные файлы .o из файлов .c в 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="[email protected]" 
CFLAGS += -mthumb -mcpu=cortex-m4 
CFLAGS += -MMD -MP -MF"[email protected]" -MT"[email protected]" 
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 [email protected] $< $(CFLAGS) 

all: $(OBJ) 
    $(CC) -o [email protected] $^ $(CFLAGS) 

Я знаю, что это ужасно неправильно, я не эксперт работает в Makefile, но я хочу, чтобы получить это право, так как это помогает понять процесс немного лучше.

Что в основном требуется, чтобы взять список .c файлов в $ (SRC) и встраивать их в список .o файлов, которые выводятся в Lib/из

Я знаю, что моя цель и% .o ... правило ужасно испортилось. Как получить цель: 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 
+1

Не пробовал, но я думаю, вы должны просто удалить строку '$ (CC) -o $ @ $^$ (CFLAGS)' (последний из вашего Makefile), чтобы заставить ее работать. – Matthias

+0

Маттиас, я определенно дам это попробовать, имеет смысл, что вы говорите. –

+0

Похоже, что удаление CFLAGS с помощью меток -MMD -MP -MF -MT делает это ... –

ответ

1

OBJ = $(SRCS:.c=.o) опечатка изменение OBJ = $(SRC:.c=.o), также похоже, что есть что-то неаккуратно с генерации файла зависимостей.

+0

Спасибо, что указали это LOK, я исправил его в своем вопросе, поскольку он был действительно правильным в моем текущем источнике. Я получаю сообщение об ошибке cc1: fatal error: O.d: Нет такого файла или каталога. –