Portál AbcLinuxu, 23. dubna 2024 19:10


Dotaz: Vnořené Makefiles

29.4.2009 21:36 Cunha
Vnořené Makefiles
Přečteno: 273×
Odpovědět | Admin

Zdravím,

mám následující strukturu adresářů:

a/

a/amd/

a/distrib/

 

V a/ mám Makefile:

vpath %.c ..
vpath %.h ..
vpath %.y ..
...
CFLAGS=-g -O0 -Wall -Werror -fPIC -DPIC -DNET_NO_IO -DNET_NO_LOG -fno-stack-protector
LDFLAGS=-lpthread

...


LIBSA +=./distrib/libdist.a
...

all: distr ...

...
distr:
     make -C distrib all   
...

z ktereho includuju (pravidlo distr) Makefile z a/distrib:

MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
RANLIB=ranlib
OBJ=net.o msg.o
HEAD=main.h

NAME = project
CFLAGS=-g -O0 -Wall -Wall -fPIC -fno-stack-protector
LDFLAGS=-lpthread
OPT=-Wall -pedantic -pthread
CC=gcc

# build
build: $(NAME)

$(NAME): ${OBJ}
    ar cru libdist.a net.o msg.o
    ranlib libdist.a

${OBJ}:${HEAD}

%.o : %.c
    gcc $(CFLAGS) -c $<

# clean
clean:
    rm -rf *.o libdist.a

# all
all: project

Pokud zadám 'make' v a/, pak se mi to zkompiluje v pořádku. Ale v adresáři a/amd/ je Makefile:

include ../Makefile

Pokud zadám make v tomto podadresáři, vypíše mi to:

make -C distrib all   
make: *** distrib: No such file or directory.  Stop.
make: *** [distr] Error 2

Vím, že by to mělo být něco s VPATH, ale nevím jak na to. Zkoušel jsem něco vygooglit, ale nezabralo nic. Díky

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.4.2009 02:50 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
Rozbalit Rozbalit vše Re: Vnořené Makefiles
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příkaz make -C distrib all se bude chovat podobně jako cd distrib; make all; cd -, a pokud v adresáři amd není podadresář distrib, tak to nefunguje. Podle manuálu totiž parametr -C adresář říká, že před tím, než se načtou jakékoli soubory, přejde make do zadaného adresáře.
30.4.2009 09:01 cunha
Rozbalit Rozbalit vše Re: Vnořené Makefiles

No, to tusim. Ale jak cestu k adresari pridat?

Diky

30.4.2009 10:30 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
Rozbalit Rozbalit vše Re: Vnořené Makefiles
Připadá mi to spíš jako chyba v návrhu struktury těch skriptů. Pokud v adresáři a/amd funguje make -f ../distrib/Makefile all, půjde to udělat třeba tak, že se v a/Makefile zavede nová proměnná BASE_PATH:
ifndef BASE_PATH
BASE_PATH = .
endif
Potom je třeba změnit pravidlo distr:
distr:
     make -f $(BASE_PATH)/distrib/Makefile all 
V a/amd/Makefile se potom na začátek přidá nahoru definice:
BASE_PATH = ..
30.4.2009 11:02 cunha
Rozbalit Rozbalit vše Re: Vnořené Makefiles

Díky

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.