2009-03-28 5 views
0

AVR 프로젝트에서 작업 중이며 내 코드가 포함 된 여러 폴더가 있습니다.(avr-gcc) 하위 디렉토리에 대한 메이크 파일 지원

내가 사용중인 메이크 파일은 Pat Deegan의 "Standardized AVR Makefile Template"입니다. 모든 폴더에있는 모든 cpp 파일을 올바르게 컴파일하고 올바른 개체 (.o) 파일을 생성 할 수 있습니다.

그러나 링커는 하위 폴더의 .o 파일 (컴파일러가 기본 폴더에 넣음)을 찾으려고하기 때문에 오류가 발생합니다. 이 오류의 예입니다 내가 얻을 :

AVR-GCC : 하위 폴더/module.o : 그런 파일이나 디렉토리 메이크업 : ***를

[GrandCanyon.out] 오류 1

링커와 컴파일러가 동일한 폴더에 파일 (.o)을 넣고 확인하도록 수정하는 것을 도와 줄 수 있습니까? http://electrons.psychogenic.com/articles/Makefile.tpl

+0

OP가이 사이트에서 사라진 것처럼 보입니다. – ndim

답변

2

문제는 디렉토리를 제거하고 파일 이름 만 (link를) 잎 필터 명령입니다 :

당신이 여기 메이크를 얻을 수 있습니다 당신에게

감사드립니다.

# 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

안녕하세요 C에 AVR MCU를 프로그래밍하고 있습니다 만 C++이 아닙니다. 그래서 섹션 CFLAGS에서 makefile을 한 줄 더 확장했습니다.

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++이 아니더라도 도움이되기를 바랍니다.