 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.01 Kraj: Ljubljana
|
Objavljeno: Pon Apr 11, 2011 1:01 pm Naslov sporočila: [SOLVED] make in makefile |
|
|
Lep pozdrav!
Me zanima, če kdo razume in obvlada make in pisanje makefilov? Sam sem namreč napisal en makefile, ki iz source datotek, ki se nahajajo v podmapah (src, inc in str) delovne mape naredi program... no vsaj naj bi ga naredil.
Program dela v kolikor iz prerequisitov odstranim %.h a mi potlej ne vključi header datotek. V kolikor v prerequisite dodam %.h mi javi napako, kot da headerja ne najde, čeprav je tam. Makefile izgleda takole:
Koda: |
SHELL := /bin/bash
ROOT := $(shell pwd)
INC := $(ROOT)/inc
SRC := $(ROOT)/src
STR := $(ROOT)/str
EXE := exe
AS := arm-none-eabi-as -mcpu=arm926ej-s -c -Wall -I $(INC) -I$(SRC) -I $(STR)
GCC := arm-none-eabi-gcc -mcpu=arm926ej-s -c -Wall -I $(INC) -I$(SRC) -I $(STR)
LDSCRIPT := test.ld
LD := arm-none-eabi-ld -T $(LDSCRIPT)
HEADERS := $(notdir $(wildcard $(INC)/*.h))
SOURCES_GCC := $(notdir $(wildcard $(SRC)/*.c))
SOURCES_AS := $(notdir $(wildcard $(STR)/*.s))
OBJECTS_GCC := $(SOURCES_GCC:.c=.o)
OBJECTS_AS := $(SOURCES_AS:.s=.o)
VPATH := $(STR):$(SRC):$(INC)
all : $(EXE)
@echo konec postopka: izvrsljiv program po imenu $(EXE) se nahaja v mapi $(ROOT)
$(EXE) : $(OBJECTS_AS) $(OBJECTS_GCC)
@echo objekti so: $(OBJECTS_AS) $(OBJECTS_GCC)
@echo headerji so: $(HEADERS)
@echo linkanje objektov v izvrsljiv program...
$(LD) -o $@ $^
%.o : %.s %.h
@echo prevajanje ASSEMBLY izvornih datotek...
$(AS) -o $@ $<
%.o : %.c %.h
@echo prevajanje C izvornih datotek...
$(GCC) -o $@ $<
.PHONY : clean
clean :
@echo brisanje objektov
rm *.o
@echo brisanje izvrsljivega programa
rm $(EXE)
|
Nazadnje urejal/a 71GA Sre Apr 27, 2011 10:05 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Benjamin Član

Pridružen-a: Tor 10 Jul 2007 11:23 Prispevkov: 116 Aktiv.: 0.53 Kraj: Trebnje, Ljubljana
|
Objavljeno: Pon Apr 11, 2011 2:08 pm Naslov sporočila: |
|
|
Živjo!
Kot prvo lahko pogledaš ukaze, ki se izvršijo, ko kličeš 'make'. Verjetno boš lahko že iz tega razbral kaj gre narobe.
Predlogi:
1. Namesto INC := $(ROOT)/inc lahko uporabiš samo INC := ./inc
2. Pri AS in GCC izbriši -I$(SRC) -I $(STR)
3. Pri HEADERS, SOURCES_* dodaj := ./inc/$(notdir)
4. %.o : %.c %.h
Nikjer nimaš definicije, kako naj make naredi %.c ter %.h ?
LP _________________ Cessna 152: "Flight Level Three Thousand, Seven Hundred"
Controller: "Roger, contact Houston Space Center" |
|
Nazaj na vrh |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.01 Kraj: Ljubljana
|
Objavljeno: Sre Apr 27, 2011 10:05 am Naslov sporočila: |
|
|
Hvala, mi je uspelo. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|