(avr-gcc) Поддержка Makefile для подкаталогов - PullRequest
0 голосов
/ 28 марта 2009

Я работаю над проектом AVR, и у меня есть несколько папок с моим кодом.

Используемый мной make-файл - это «стандартизированный шаблон AVR Makefile» Пэта Дигана. Он способен правильно компилировать каждый файл cpp в каждой папке и генерировать нужные файлы объектов (.o).

Однако компоновщик не работает, потому что он пытается найти файлы .o в подпапках (компилятор помещает их в основную папку). Это пример ошибки, которую я получаю:

avr-gcc: подпапка / module.o: Нет такого файла или каталога: ***

[GrandCanyon.out] Ошибка 1

Можете ли вы помочь мне изменить его, чтобы компоновщик и компилятор помещали и проверяли файлы (.o) в одних и тех же папках?

Спасибо

Вы можете получить make-файл здесь: http://electrons.psychogenic.com/articles/Makefile.tpl

Ответы [ 2 ]

2 голосов
/ 30 марта 2009

Проблема в команде фильтра, которая удаляет каталог и оставляет только имя файла ( ссылка ). Поэтому вместо определения всех файлов в одной строке и выполнения:

#  C
CFILES=$(filter %.c, $(PRJSRC))
#  Assembly
ASMFILES=$(filter %.S, $(PRJSRC))

вам нужно вручную определить список файлов для каждого типа:

CCFILES = sub1/file1.c sub2/file2.c
ASMFILES = sub1/file1.asm sub3/file2.asm
1 голос
/ 27 июля 2011

Привет, я программирую микроконтроллеры AVR только на C, а не на C ++. Поэтому я расширил make-файл примерно на одну строку в разделе CFLAGS

CFLAGS=-I. $(INC) -g -mmcu=$(MCU) -O$(OPTLEVEL) \ 
    -fpack-struct -fshort-enums             \ 
    -funsigned-bitfields -funsigned-char    \ 
    -Wall -Wstrict-prototypes               \ 
    -o $(firstword $(filter %.o, $(<:.c=.o))) \
    -Wa,-ahlms=$(firstword $(filter %.lst, $(<:.c=.lst)))

Это работает для меня, когда у меня есть исходные файлы в подкаталогах. Я надеюсь, что это поможет вам, хотя это не для C ++

...