Moderadores: 51, guest2003, Renie, gpenga
TARGET = teste
PROJDIRS := src
SRCFILES := $(shell find $(PROJDIRS) -mindepth 1 -maxdepth 3 -name "*.c")
SRSFILES := $(shell find $(PROJDIRS) -mindepth 1 -maxdepth 3 -name "*.s")
OBJFILES := $(patsubst %.s,%.o,$(SRSFILES)) $(patsubst %.c,%.o,$(SRCFILES));
AUXFILES := Makefile link.ld
CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
OBJCOPY = arm-none-eabi-objcopy
CFLAGS := -Wall
ASFLAGS := -Wall
LDFLAGS := -Map $(TARGET).map -T link
all: $(OBJFILES)
$(LD) $(LDFLAGS) -o $(TARGET) $(OBJFILES)
$(OBJCOPY) --output-target ihex $(TARGET) $(TARGET).hex
clean:
rm $(OBJFILES)
rm $(TARGET)
rm $(TARGET).map
rm $(TARGET).hex
# nome do projeto
TARGET = teste
# Pastas contendos os arquivos para compilação
PROJDIRS := src
# Procuras todos os arquivos .c e .h nas pastas listadas em PRJDIRS
SRCFILES := $(shell find $(PROJDIRS) -mindepth 1 -maxdepth 3 -name "*.c")
SRSFILES := $(shell find $(PROJDIRS) -mindepth 1 -maxdepth 3 -name "*.s")
# Muda a extenção para usar com o LD
OBJFILES := $(patsubst %.s,%.o,$(SRSFILES)) $(patsubst %.c,%.o,$(SRCFILES));
# Apenas para listar os arquivos auxiliares
AUXFILES := Makefile link.ld
# Isso aqui ja esta no PATH export PATH=$PATH:/usr/arm/bin
CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
OBJCOPY = arm-none-eabi-objcopy
# Aqui vai as otimização para a cpu que você esta usando
CFLAGS := -Wall
ASFLAGS := -Wall
LDFLAGS := -Map $(TARGET).map -T link
# Aqui faz a ligação e gera o arquivo hex
all: $(OBJFILES)
$(LD) $(LDFLAGS) -o $(TARGET) $(OBJFILES)
$(OBJCOPY) --output-target ihex $(TARGET) $(TARGET).hex
# Faz a limpeza...
clean:
rm $(OBJFILES)
rm $(TARGET)
rm $(TARGET).map
rm $(TARGET).hex
ENTRY(__reset)
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K
RAM (rw) : ORIGIN = 0x40000000, LENGTH = 32K
}
SECTIONS
{
.text :
{
* ( .text )
} > FLASH
.data :
{
* ( .data )
} > FLASH
.bss :
{
* ( .bss )
} > RAM
}
Hum, então pelo que eu imagino.
Eu não vi em lugar algum, o usuários avisando a maquina make sobre o MAIN.
Então acredito que a máquina faz um cache de todos os arquivos e includes, encontra o MAIN, e em função disto ele vai chamando os arquivos, criando os obj e depois vai linkando tudo ?
Agora eu entendi o que o sistema make que você postou faz, mais não entendi como ?
Obrigatoriamente para poder utilizar o make, deverá existir um arquivo main.c ?
Ou conforme mencionei acima, a maquina de compilação descobre sozinho o loop main ?
Eu estou meio confuso, pois, o projeto que eu criei utilizando o keil, possui 9 drives de periféricos, 2 de framework, 2 de abstração de processos, e mais o main.
São 14 arquivos.c e mais uns trocentos arquivos.h que são compartilhados para todos os arquivos.c, haja visto que cada arquivo.c possui o seu arquivo.h de prototipação, constantes, etc.
m3t4l3ir0 escreveu:Fabim o tipo de cpu voce muda na linha CFLAGS
CFLAGS := -Wall -mcpu=arm926ej-s
O compilador basta alterar as linhas
CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
LD = arm-none-eabi-ld
OBJCOPY = arm-none-eabi-objcopy
Para
CC = gcc
AS = as
LD = ld
OBJCOPY = objcopy
depende de como você compilou seu toolchain.
Voltar para Linux ( x86 ou x64 )
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante