Seguimos....con los Makefiles y su optimizacion....
3.- Como compilar/linkar
Despues de revisar como esta montado basicamente el fichero Rules.make,
pasaremos a saber exactamente que es lo que hay que hacer para que la cosa
vaya tomando forma.
Generalmente, y siguiente la estructura de archivos antes propuestas, vamos
a saber como podemos nosotros adaptar este sistema para nuestro uso
particular.
Hemos dicho , que el fichero Rules.make es el alma de nuestro esfuerzo por
hacer mas simple el hecho de compilar/linkar lo que sea.
En ese caso, vamos a ubicar dicho fichero en el directorio principal de
nuestro proyecto, en XWT es el propio directorio, ahi es donde tambien lo
dejaremos.
Entonces tenemos la siguiente estructura de directorios:
C:\Mi Proyecto\ --> En este directorio dejaremos Rules.make, mas otro fichero
Makefile que es el que invocara al resto, y lo veremos mas tarde.
Veamos ahora el resto de ficheros Makefiles que nos faltan y que estaran
cada uno ubicados en sus respectivos directorios, y que nos serviran para
notificar al Rules.make como tiene que actuar.
4.- Cambiando el comportamiento interno.
Empecemos pues por el primero:
\SRC\
En este directorio vamos a poner TODOS los .prg que formaran parte de nuestra
propia libreria, es decir, que TODO lo que haya aqui , se transformara
en una libreria, y ademas, puede contener tambien, si es necesario, partes
de codigo fuente en archivos .c
Esto nos es de gran utilidad para contener codigo de clases o/y funciones que
nos sera comun a TODOS nuestras aplicaciones que vayamos a realizar.
Dicho fichero, Makefile, lo analizamos entero pues este si que tienes que
entenderlo para afinar TU sistema :
[Nota:Partimos de la base del XWT por que asi podeis verlo vosotros mismos]
############################################
#
# Makefile para librerias en codigo .PRG
#
############################################
TARGET=libxwt.a
PRGFLAGS=-I../include
CFLAGS+=-I../include
XWT_INSTALL=../lib
CSOURCES=xwt_api.c
include ../Rules.make
TARGET Nombre de la libreria que queramos que se genere.
PRGFLAGS Flags que queremos pasarle a Harbour.
CFLAGS Flags que queremos pasarle a compilador de C.
XWT_INSTALL Donde esta ubicado el directorio de las librerias para
copiar la libreria aqui generada.
fichero de C y queremos que forme parte de la libreria. Usualmente no sera
necesario que lo indiques, pues lo borrais y y hasta ;-)
¿ Que tienes mas de un .C ? pues tan simple como:
CSOURCES= uno.c dos.c tres.c \
cuatro.c cinco.c ....etc...
y por ultimo y muy importante es la siguiente linea:
include ../Rules.make que lo unico que hace es coger TODO lo del
fichero Rules.make
Lógicamente, el nombre de los flags los podemos cambiar, por ejemplo, donde
pone XWT_INSTALL, pues nos quedaria mejor poner LIB_INSTALL, y redefinirlo en
todos los Makefiles que hagan uso de dicha macro, y sobretodo en Rules.make
Ya esta , con esto, lograreis montar una libreria , sin especificar
absolutamente nada.
Si quereis que otro archivo fuente .prg o .c , forme parte de vuestra libreria
pues lo copiais aqui y punto, despues se llama a Make para que compruebe si
hace falta o no generar la libreria de nuevo.
Ahora nos toca hacer los mismo, pero para nuestro codigo en C.
[ Nota: No tengais en cuenta al pie de la letra todo. Si no tuvierais
codigo en C para generar una libreria aparte, lo descartais sin mas, y
simplemente luego en el Make principal modificais para que no vaya a ejecutar
un Makefile que no va a existir ]
Si os fijais , tenemos en el XWT, una directorio SRC, y dentro un par mas,
nos quedaremos con el primero, el xwt_gtk, ya que este es el que se usa
con las herramientas GNU, el otro se usara a partir de los Make usando el
Borland o el de Microsoft, y ya dije que no perderia el tiempo con ello.
Como veis, mi propuesta es separar y quitar de SRC el codigo de C, sera
tan simple como que el Make principal llame a otro sitio en vez de donde esta
ahora ubicado.
Viendo el Makefile en cuestion, /xwt/src/xwt_gtk, tenemos una serie de macros
que veremos a continuacion:
TARGET=libxwt_gtk.a
CFLAGS+=-I. -I../../include `pkg-config --cflags gtk+-2.0`
SOURCE_TYPE=c
XWT_INSTALL=../../lib
include ../../Rules.make
TARGET ya sabemos para que nos servira.
CFLAGS le pasa opciones de compilador de C
XWT_INSTALL ya lo vimos.
include Idem.
SORCE_TYPE ESTE ES MUY IMPORTANTE, ya que informa que los ficheros
que va a tratar aqui seran para el compilador de C, si no, entraria el
compilador de Harbour y se pegaria de ostias. ;-)
[Nota:pero si os fijais , vereis ../../, y esto
es porque desciende un nivel mas, pero como nosotros lo vamos a poner
al mismo nivel que el directorio SRC, lo cambiamos a ../, igual que el Makefile
del SRC ]
Ya tenemos listo dos librerias que se generaran automaticamente a traves
del Make.
Saludos.
..y el proximo capitulo...el resto...
Como montar el /TESTS y el makefile principal