2009-03-28 8 views
0

Je travaille sur un projet AVR et j'ai plusieurs dossiers contenant mon code.(avr-gcc) Prise en charge Makefile pour les sous-répertoires

Le fichier makefile que j'utilise est le "Standardized AVR Makefile Template" de Pat Deegan. Il est capable de compiler correctement chaque fichier cpp dans chaque dossier et de générer les bons fichiers d'objets (.o).

Cependant, l'éditeur de liens échoue car il essaie de trouver les fichiers .o dans les sous-dossiers (le compilateur les place dans le dossier principal). Ce est un exemple d'une erreur que je reçois:

avr-gcc: sous-dossier/module.o: Aucun fichier ou répertoire make: ***

[GrandCanyon.out] Erreur 1

Pouvez-vous m'aider à le modifier afin que l'éditeur de liens et le compilateur mettent et vérifient les fichiers (.o) dans les mêmes dossiers?

Merci

vous pouvez obtenir le makefile ici: http://electrons.psychogenic.com/articles/Makefile.tpl

+0

On dirait que l'OP a disparu de ce site. – ndim

Répondre

2

Le problème est la commande du filtre qui supprime le répertoire et ne laisse que le nom du fichier (link). Ainsi, au lieu de définir tous les fichiers dans une seule ligne et faire:

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

vous devez définir manuellement la liste des fichiers pour chaque type:

CCFILES = sub1/file1.c sub2/file2.c 
ASMFILES = sub1/file1.asm sub3/file2.asm 
1

Salut, je suis programmation AVR MCU en C seulement pas en C++. J'ai donc étendu makefile environ une ligne dans la section 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))) 

Cela fonctionne pour moi quand j'ai les fichiers source dans les sous-répertoires. J'espère que cela vous aidera bien que ce ne soit pas pour C++