Generando un makefile con fpcmake

Con FreePascal, existe una herramienta llamada fpcmake que genera un makefile a partir de un fichero de configuración, y así poder usar el make de GNU.

Instalación

En Ubuntu, esta herramienta está incluida en el paquete fp-utils (Un único paquete de 3730kB). Para instalarla hacemos:

$ sudo apt-get install fp-utils



Fichero de configuración

El fichero de configuración tiene que llamarse makefile.fpc . En él, escribimos los nombres de los fuentes (units, ficheros principales y ejemplos), versión del compilador a usar, nombre de paquete, versión, etc. No son obligatorias todas las etiquetas, lo que, si no se definen, no estarás dichas disponibles las opciones en el makefile.

Algunas de las secciones son las siguientes:
 
[target]
Esta sección es la más importante del fichero makefile.fpc. Es donde están especificadas las reglas para compilar todo (make all) y de donde se coge el make default. Algunas de las opciones son:
  • programs: lista de programas separadas por espacio sin la extensión .pas. El fpcmake los pone automáticamente.
  • units : lista de unidades separadas por espacios sin la extensión. El fpcmake los pone automáticamente.
  • examples: lista de programas de ejemplo. Al igual que los dos anteriores, separados por espacio y sin extensión. 


[compiler]
En esta sección se puede especificar:
  • version: en esta sección se puede especificar la versión del compiladors
  • options: las opciones para compilar. Por ejemplo, le podemos pasar -g para depurar.
  • unitdir: lista de directorios separados por dos puntos de las units incluidas (si están en otro directorio). Hay que pasarle al compulador la opción -Fu.

[package]
Un paquete es un conjuto de units. En esta sección se pueden especificar:
  • name: nombre del paquete.
  • version: versión del paquete
  • main: para indicar el paquete forma parte de otro paquete.
 Existen más secciones como install (donde se especifican los directorios donde se colocarán los programas y datos), dist, para crear una distribución de los programas etc.
Para más detalle, se puede consultar el manual en consola:

$ man 5 fpcmake



Otra fuente es el apéndice E de la guía de programadores de freepascal. link. Aquí está todo bien detallado.

Un ejemplo sencillo es el siguiente:

$ cat -n makefile.fpc
     1    [target]
     2    programs=main             #Programa principal
     3    units=unit1 unit2          #Todas las units
     4    examples=test1 test2   #Programas ejemplo
     5   
     6   
     7    [compiler]
     8    version=2.2.2-8
     9    options=-g   #opciones del compilador
    10   






Generar el Makefile

Una vez hecho el archivo de configuración hacemos:

$ fpcmake
Processing makefile.fpc
 i386-linux requires: rtl
 Writing Makefile





Usando make

Con el makefile generado, tenemos múltiples opciones. Algunas de ellas son:
  • make                 : compila los princiales más las units especificadas.
  • make examples: compila los programas ejemplos.
  • make clean       : borra todos los .o y .ppu 
  • make install     : instala los programas más las units.
  • make info           : devuelve información acerca del programa, directorios de trabajo, versión, librerías, etc.

Nota: cuando hacemos el make, se nos crea una carpeta units/ donde se van a colocar todos los .o y .ppu. Al hacer make clean, se borrarán de este directorio.

#bug en versiones debian

Hay un bug en versiones del compilador 2.2.0 para sistemas de 64 bits:


$ fpcmake -v 
FPCMake Version 2.0.0 [2009/01/08]
Processing makefile.fpc
 Targets: "x86_64-linux"
 Globals:
    FPCDIR = ""
    PACKAGESDIR = "$(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra $(FPCDIR)/packages"
    UNITSDIR = "$(FPCDIR)/units/$(FULLTARGET)"
    BASEDIR = "/home/juanjo/Desktop/Clases0910/FreePascal/listas"
 Required packages for linux-x86_64: rtl
 Package "rtl": Looking for Makefile.fpc: " /packages/rtl/Makefile.fpc /packages/base/rtl/Makefile.fpc /packages/extra/rtl/Makefile.fpc /packages/rtl/Makefile.fpc "
 Package "rtl": Looking for Package.fpc: " /units/x86_64-linux/rtl/Package.fpc "
Error: Target "linux", package "rtl" not found



Enlace del bug: http://bugs.freepascal.org/view.php?id=10775

1 comentarios:

Anónimo dijo...

muy muy practico. me ha gustado

Publicar un comentario en la entrada