Buscar dependencias en directorios Ejemplo VPATH

Anuncio
%XVFDUGHSHQGHQFLDVHQGLUHFWRULRV
+DELWXDOPHQWH VH VXSRQH TXH WRGRV ORV DUFKLYRV IXHQWHV \
ELQDULRVHVWiQHQHOPLVPRGLUHFWRULR
9 ¿Qué ocurre si se organizan los archivos de otra manera?
9 Hay que buscar archivos (dependencias) fuera del directorio de
trabajo (actual).
9DULDEOH93$7+(VSHFLILFDXQFRQMXQWRGHGLUHFWRULRVGRQGH
PDNH GHEHEXVFDUDGHPiVGHOGLUHFWRULRDFWXDO
Herramientas de Programación - Tema 1 (Clase 3)
1
(MHPSOR93$7+
(MHPSOR
VPATH = src ../headers
fecha.o: fecha.h
$PSOtDODE~VTXHGDD
$PSOtDODE~VTXHGDD
VUF
VUF
KHDGHUV
KHDGHUV
%XVFDIHFKDK
%XVFDIHFKDKHQ
HQ
IHFKDK
IHFKDK
VUFIHFKDK
VUFIHFKDK
KHDGHUVIHFKDK
KHDGHUVIHFKDK
Herramientas de Programación - Tema 1 (Clase 3)
2
'LUHFWLYDYSDWK
6LPLODUDODYDULDEOH93$7+SHURPiVVHOHFWLYD
9 Permite especificar el camino de búsqueda para un tipo
específico de archivos.
8VRSRQHUYSDWK SDWUyQ!GLUHFWRULR!
vpath %.o ../LIB
9 Significado “buscar cualquier dependecia con el sufijo ‘.o’ en
‘../LIB’
8VRTXLWDUYSDWK SDWUyQ!
9 “Límpia” el camino de búsqueda establecido para el patrón.
Herramientas de Programación - Tema 1 (Clase 3)
3
,QFOXLURWURVPDNHILOHLQFOXGH
(VWHGLUHFWLYDVXVSHQGHODOHFWXUDGHOPDNHILOH DFWXDOSDUD
OHHUXQRRPiVPDNHILOH GLIHUHQWHVDQWHVGHFRQWLQXDU
6LQWD[LV
include DUFKLYRV
3RVLEOHXWLOLGDGYDULRVSURJUDPDVHQGLUHFWRULRVGLIHUHQWHV\
FRQWURODGRV SRU PDNHILOH SDUWLFXODUHV UHTXLHUHQ
GHILQLFLRQHVGHYDULDEOHVFRPXQHV
9DULDEOH GH HQWRUQR 0$.(),/(6 HV LQWHUSUHWDGD SRU PDNH
FRPR XQD OLVWD GH DUFKLYRV PDNHILOH D SURFHVDU
SUHYLDPHQWH
Herramientas de Programación - Tema 1 (Clase 3)
4
/ODPDUDRWURVPDNHILOHPDNH &
(VWHGLUHFWLYDVXVSHQGHODOHFWXUDGHOPDNHILOH DFWXDOSDUD
HMHFXWDUHOPDNHILOH HQHOGLUHFWRULRLQGLFDGR
6LQWD[LV
make etiqueta –C dir
3RVLEOHXWLOLGDGYDULRVSURJUDPDVHQGLUHFWRULRVGLIHUHQWHV\
FRQWURODGRV SRU PDNHILOH SDUWLFXODUHV 7HQHPRV XQ
PDNHILOH SULQFLSDOTXHOODPDDORVRWURVPDNHILOH
Herramientas de Programación - Tema 1 (Clase 3)
5
'LUHFWLYDVFRQGLFLRQDOHV
0HGLDQWH GLUHFWLYDV GH PDNH VH SXHGHQ GHILQLU SDUWHV
FRQGLFLRQDOHVHQXQPDNHILOH
(MHPSOR 6H GHVHDFRPSLODU FRQ XQD ELEOLRWHFD GLIHUHQWH VL HO
FRPSLODGRU&;;HVJTXHVLHVRWURGLVWLQWR
libs_para_gnu = -lgnu
libs_normales =
agenda: $(objs)
ifeq ($(CXX),g++)
$(CXX) –o agenda $(objs) $(libs_para_gnu)
else
$(CXX) –o agenda $(objs) $(libs_normales)
endif
Herramientas de Programación - Tema 1 (Clase 3)
6
2WUDVGLUHFWLYDVFRQGLFLRQDOHV
LIQHT DUJDUJÆ verdad si DUJ es distinto de DUJ
LIGHI YDULDEOH Æ verdad si la variable está definida y tiene un
valor no vacío.
LIQGHI YDULDEOHÆ verdad si la variable no está definida o tiene
un valor vacío.
6LQWD[LVJHQHUDO
directiva condicional (LIHT/LIQHT/LIGHI/LIQGHI)
2SFLRQDO
2SFLRQDO
HOVH
HQGLI
texto si es cierta
texto si es falsa
Herramientas de Programación - Tema 1 (Clase 3)
7
'LUHFWLYDVFRQGLFLRQDOHV(MHPSOR
var=
var2= $(var)
ifdef var2
estaDefinida=
si
else
estaDefinida=
no
endif
(VWD'HILQLGD VLVL
(VWD'HILQLGD
var2=
ifdef var2
estaDefinida=
si
else
estaDefinida=
no
endif
(VWD'HILQLGD QR
QR
(VWD'HILQLGD
1RVHUHDOL]DXQDH[SDQVLyQGHODYDULDEOH
Herramientas de Programación - Tema 1 (Clase 3)
8
0DFURVGLUHFWLYDGHILQH
3HUPLWHGHILQLUYDULDEOHVGHYDULDVOtQHDVGHWH[WR
6LQWD[LV
GHILQHQRPEUH
WH[WR
HQGHI
(MHPSOR
define dos-lineas
echo agenda
echo $(objs)
endef
Herramientas de Programación - Tema 1 (Clase 3)
9
1RPEUHVGHHWLTXHWDVHVSHFLDOHV
<DFRQRFHPRV3+21<
2WUDVHWLTXHWDVGHLQWHUpV
9 .PRECIOUS: La etiqueta de la que depende no se borra si
make se ve interrumpido durante la ejecución de sus órdenes.
9 .DELETE_ON_ERROR: contrario
+D\PiV
9 .IGNORE
9 .INTERMEDIATE
9 .SECONDARY, etc...
Herramientas de Programación - Tema 1 (Clase 3)
10
LQVWDOO8QDHWLTXHWDKDELWXDO
(VHOQRPEUHGHHWLTXHWDKDELWXDOSDUDIRU]DUODLQVWDODFLyQGHO
SURJUDPDTXHVHJHQHUDFRQHOPDNHILOH
9 Compila todo.
9 Instala la aplicación, copiando los archivos necesarios para su
funcionamiento en el directorio adecuado.
9 Establece los permisos de acceso adecuados.
9HUÆ PDQLQVWDOO
(MHPSOR
inst_flags= -D –mode=‘u=rwx,go=rx’
inst_dir= $(HOME)/bin
install $(inst_flags) demo $(inst_dir)
Herramientas de Programación - Tema 1 (Clase 3)
11
SDWVXEVW)XQFLRQHVGHVXEVWLWXFLyQGHFDGHQDV
SDWVXEVW SDWURQUHHPSOD]RWH[WR
%XVFD XQD FDGHQD VHSDUDGD SRU HVSDFLRV HQ HO WH[WR TXH
FRQWHQJDHOSDWUyQLQGLFDGR\ORVXVWLWX\HSRUUHHPSOD]R
9 El patrón % funciona como “wildcard”
(MHPSOR
objs=$(patsubst %.c,%.cpp,x.c.c y.c)
La variable $(objs) tendrá el valor x.c.cpp y y.cpp
Herramientas de Programación - Tema 1 (Clase 3)
12
(MHUFLFLR 6HW
6XSRQJDPRV TXH WHQHPRV ORV VLJXLHQWH ILFKHURV HQ VXV
FRUUHVSRQGLHQWHV GLUHFWRULRV
+20(65&GHPRFSS
+20(65&GHPRFSS
+20(65&GHPRK
+20(65&GHPRK
+20(65&XWLOJHQHUDOK XVDGR SRUDPERV IXHQWHV
+20(65&XWLOJHQHUDOFSS
(VFULELU GRV PDNHILOHV TXH JHQHUHQ ORV HMHFXWDEOHV GHPR \ GHPR HO
SULPHUR\HOREMHWR JHQHUDORHOVHJXQGR
Herramientas de Programación - Tema 1 (Clase 3)
13
6ROXFLyQVRORGLUHFWRULR0DNHILOH
todo: demo1 demo2
demo1: demo1.o general.o
g++ demo1.o general.o -o demo1
demo2: demo2.o
g++ demo2.o general.o -o demo2
demo1.o: demo1.h general.h demo1.cpp
g++ -c demo1.cpp -Wall
demo2.o: demo2.h general.h demo2.cpp
g++ -c demo2.cpp -Wall
general.o: general.h general.cpp
g++ -c general.cpp –Wall
limpiar:
rm *.o
rm demo1 demo2
Herramientas de Programación - Tema 1 (Clase 3)
14
6ROXFLyQVRORGLUHFWRULR0DNHILOH
CXX= g++
CXXFLAGS= -Wall
objs1= demo1.o general.o
objs2= demo2.o general.o
.PHONY: todo
todo: demo1 demo2
$(objs1): general.h
$(objs2): general.h
demo1: $(objs1)
$(CXX) $(objs1) -o demo1
demo2: $(objs2)
$(CXX) $(objs2) -o demo2
(Q HVWH0DNHILOH XVDUHPRV
YDULDEOHV\UHJODVLPSOtFLWDV
GHPRRGHPRFSS \GHPRK
LPSOtFLWRV\JHQHUDOK QR
LPSOtFLWR
GHPRRGHPRFSS \GHPRK
LPSOtFLWRV\JHQHUDOK QR
LPSOtFLWR
JHQHUDORJHQHUDOFSS \JHQHUDOK
VRQLPSOtFLWRV
.PHONY: limpiar
limpiar:
rm *.o
rm demo1 demo2
Herramientas de Programación - Tema 1 (Clase 3)
15
6ROXFLyQVRORGLUHFWRULR0DNHILOH
CXX= g++
CXXFLAGS= -Wall
objs= demo1.o demo2.o general.o
objs1= demo1.o general.o
objs2= demo2.o general.o
.PHONY: todo
todo: demo1 demo2
$(objs): general.h
$(objs): %.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $@
demo1: $(objs1)
$(CXX) $< -o $@
(Q HVWH0DNHILOH
XVDUHPRVYDULDEOHV\
UHJODVGHSDWUyQ
HVWiWLFR
(VWDEOHFHPRV ODUHJOD
GHSDWURQHVHVWiWLFRV
SDUDJHQHUDUORV
REMHWRV
(WLTXHWD
SDWURQBHWLTXHWD
SDWURQBGHSHQGHQFLD
1RPEUHGHOD
SULPHUDGHSHQGHQFLD
#1RPEUHGHOD
HWLTXHWDGHODUHJOD
demo2: $(objs2)
$(CXX) $< -o $@
Herramientas de Programación - Tema 1 (Clase 3)
16
6ROXFLyQVRORGLUHFWRULR0DNHILOH
CXX= g++
CXXFLAGS= -Wall
objs= demo1.o demo2.o general.o
objs1= demo1.o general.o
objs2= demo2.o general.o
.PHONY: todo
(QHVWH0DNHILOH
todo: demo1 demo2
KDUHPRVHO0DNHILOH FRQ
ODPtQLPDH[SUHVLyQ
$(objs): general.h
SRVLEOHXVDQGR
YDULDEOHVUHJODV
demo1: $(objs1)
LPSOtFLWDVUHJODVGH
$(CXX) $< -o $@
SDWURQHVHVWiWLFRV
demo2: $(objs2)
$(CXX) $< -o $@
general: general.o
$(CXX) $< -o $@
Herramientas de Programación - Tema 1 (Clase 3)
17
6ROXFLyQGLUHFWRULRV0DNHILOH VUF
CXX= g++
CXXFLAGS= -Wall
VPATH= ./util
objs= demo1.o demo2.o
.PHONY: todo
todo: demo1 demo2
$(objs): general.h
demo1: demo1.o general.o
$(CXX) demo1.o ./util/general.o -o demo1
demo2: demo2.o general.o
$(CXX) demo2.o ./util/general.o -o demo2
general.o: general.cpp general.h
make todo –C util
.PHONY: limpiar
limpiar:
rm $(objs)
rm demo1 demo2
make limpiar –C util
Herramientas de Programación - Tema 1 (Clase 3)
18
6ROXFLyQGLUHFWRULRV0DNHILOH XWLO
CXX= g++
CXXFLAGS= -Wall
objs= general.o
.PHONY: todo
todo: general.o
general.o: general.h general.cpp
$(CXX) -c general.cpp $(CXXFLAGS)
.PHONY: limpiar
limpiar:
rm $(objs)
Herramientas de Programación - Tema 1 (Clase 3)
19
Descargar