Compilar programas¶
El proceso de creaci贸n de un programa pasa por varias fases:
- escribir el texto del programa (archivo fuente) y guardarlo
- compilarlo para obtener un archivo binario ejecutable
- ejecutarlo
Las labores de compilaci贸n y ejecuci贸n se pueden hacer de tres maneras:
-
mediante comandos, en una ventana de Terminal separada de Geany. Por ejemplo, si escribimos un programa en lenguaje C y lo guardamos como miprograma.c, podemos usar el compilador gcc, t铆pico de sistemas Linux. El comando de compilaci贸n ser铆a algo as铆 como:
gcc -o miprograma miprograma.c... lo que ejecuta el compilador gcc indicando que el archivo resultante (output) se llame miprograma, y que el fichero fuente es miprograma.c
-
tambi茅n podemos ejecutar esos mismos comandos en la emulaci贸n de VTE de Geany
-
como tercera alternativa, podemos invocar los comandos desde el men煤 Construir de Geany.
Con esta tercera opci贸n podemos hacer uso de los men煤s de Geany para lograr cosas tales como:
- compilar el programa
- ejecutar el programa
- mostrar los errores de compilaci贸n en la ventana de mensajes
- usar herramientas de an谩lisis de sintaxis (lint)
El men煤 Construir se adapta al lenguaje de programaci贸n utilizado, de forma que se ocultan o muestran opciones de men煤 seg煤n la configuraci贸n que tengamos.
La opci贸n Construir > Establecer comandos de construcci贸n determina las entradas del men煤 y los comandos a ejecutar, tal y como los escribir铆amos en un terminal de comandos.
Compilar desde Geany¶
Ejecutar los comandos desde el men煤 de Geany tiene varios beneficios:
- El archivo actual se guarda autom谩ticamente antes de ejecutar el comando.
- Los mensajes de compilaci贸n se capturan en la ventana inferior, mostr谩ndose en la pesta帽a del compilador, y se analizan en busca de advertencias o errores. Pulsando en un mensaje de error, nos lleva a la l铆nea del programa donde se ha detectado ese problema.
- Los errores de compilaci贸n se muestran en el texto del programa mediante un subrayado ondulado.
Tras analizar los fallos y reescribir el programa, puede que esos subrayados nos molesten. Podemos suprimirlos seleccionando la opci贸n de men煤 Documento > Borrar indicadores de error.
Los indicadores subrayados solo se muestran si activamos la opci贸n Editar > Preferencias > Editor > Caracter铆sticas > Usar indicadores para mostrar errores de compilaci贸n
Opciones del men煤 Construir¶
El men煤 Construir tiene una considerable flexibilidad y capacidad de configuraci贸n, adapt谩ndose a diferentes lenguajes y necesidades del usuario. Hay cuatro tipos de elementos de men煤, cada uno con un comportamiento diferente:
-
Comandos de compilaci贸n dependiendo del tipo de archivo. Muestran mensajes en la ventana inferior, pesta帽a del compilador y los analizan en busca de errores.
-
Comandos de compilaci贸n independientes del tipo de archivo. Tambi茅n capturan la salida en la pesta帽a del compilador.
-
Comandos para ejecutar el programa. Son configurables, pero el resultado no se analiza en busca de errores. Si la ejecuci贸n produce mensajes, se mostrar谩n en el terminal de comandos.
-
Comandos fijos. Realizan acciones integradas en Geany:
- Vaya al siguiente error.
- Ir al error anterior.
- Mostrar el cuadro de di谩logo de configuraci贸n de comandos del men煤 de compilaci贸n.
El n煤mero m谩ximo de elementos en cada uno de los grupos se puede configurar en Editar > Preferencias > Varias, usando las opciones con prefijo build. Podemos aumentar el n煤mero de elementos de men煤, pero solo se mostrar谩n aquellos elementos que tienen un comando asociado.
Los elementos del men煤 se pueden configurar de cuatro formas, que por orden de prioridad son:
- La configuraci贸n del proyecto, si tenemos uno abierto
- Las preferencias del usuario
- Las definiciones seg煤n tipo de archivo
- Los valores predeterminados de Geany
Dependiendo del tipo de archivo, el men煤 predeterminado se divide en secciones:
- Secci贸n 1:
- Compilar
- Build (compilar + enlazar)
- Lint (analizar sintaxis)
- Secci贸n 2: ejecuta un comando make
- Make All
- Make objetivo personalizado
- Make archivo objeto
- Secci贸n 3:
- Siguiente error
- Error anterior
- Ejecutar
- Establecer comandos de construcci贸n
Esta 煤ltima es la que se usa para configurar los comandos a ejecutar para cada entrada de este men煤.
Compilar¶
La traducci贸n de texto a lenguaje m谩quina binario se denomina compilar el programa. Tendremos tres archivos, el texto escrito por nosotros (archivo fuente), el programa en formato binario (archivo objeto) y el ejecutable final, resultado de enlazar uno o varios archivos objeto.
El comando compilar tiene diferentes usos, dependiendo del tipo de archivo:
-
Para lenguajes compilables como C y C++, el comando est谩 configurado para compilar el archivo fuente actual en un archivo objeto binario. Para completar la compilaci贸n + enlazado de archivos objeto, tenemos que usar la opci贸n Build.
-
Los archivos fuente de Java se compilar谩n para obtener un archivo de clase en formato binario bytecode.
-
Los lenguajes interpretados como Perl, Python o Ruby son aquellos que se pueden ejecutar directamente, sin necesidad de compilar el texto fuente. De todas formas, algunos de ellos tienen la opci贸n de compilar a formato binario bytecode. Si no es as铆, el comando compilar har谩 una verificaci贸n de sintaxis o, si no est谩 disponible, ejecutar谩 el archivo en modo int茅rprete.
El comando Build enlazar谩 el archivo objeto correspondiente al archivo fuente actual, para obtener un archivo ejecutable. Funciona con lenguajes compilables como C y C++. Si el archivo objeto no existe, el fuente se compilar谩 y vincular谩 en un 煤nico paso, generando el binario ejecutable.
Los lenguajes interpretados no utilizan el comando Build.
El proceso de compilaci贸n finalizar谩 con un sonido de alerta si tenemos esta opci贸n activada (men煤 Editar > Preferencias > General > Varios).
Make¶
Si necesitamos configuraciones complejas de compilaci贸n, o varias configuraciones alternativas, se recomienda escribir un archivo makefile con los pasos del proceso, y ejecutarlo usando un comando:
$ make
Este comando busca el archivo makefile y ejecuta los diferentes pasos.
Podemos ejecutar un paso concreto invoc谩ndolo por su nombre. Por ejemplo, si en el archivo makefile tenemos un paso llamado clean, podemos ejecutar:
$ make clean
y se ejecutar铆a ese paso, precedido por los relacionados en el archivo makefile (un paso puede estar condicionado a que se ejecuten otros previamente).
Cada entrada del men煤 de Geany ejecuta el comando make en la forma determinada por la opci贸n de men煤 Establecer comandos de construcci贸n. Por regla general:
-
la opci贸n
Make Allejecuta un comandomaketomando todos los pasos del ficheromakefileen el directorio del archivo actual. -
la opci贸n
Make objetivo personalizadoes similar a Make All pero se nos preguntar谩 por uno de los pasos concretos dentro del archivomakefile. -
la opci贸n de men煤
Make objetoejecutar谩 un comando:$ make archivo.ocambiando "archivo" por el nombre del archivo actual.
Es 煤til para compilar solo el archivo actual. De todas formas, depende del contenido del archivo makefile.
Lint¶
La entrada de men煤 lint ejecuta un comando lint para encontrar texto en los programas que no corresponde a ciertas pautas de estilo: c贸digo no portable entre plataformas, errores comunes o dif铆ciles de encontrar, c贸digo que "huele" mal, variables utilizadas antes de configurarse, funciones no utilizadas, divisi贸n por cero, etc. Los linters inspeccionan el c贸digo y emiten advertencias. Esto se conoce formalmente como an谩lisis de c贸digo est谩tico.
Algunos linters comunes est谩n preconfigurados en el men煤 Construir (pycodestyle para Python, cppcheck para C/C++, JSHint para JavaScript, xmllint para XML, hlint para Haskell, shellcheck para c贸digo shell, ...), pero todas estas son herramientas independientes que debemos instalar antes de usarlas.
Errores¶
Los errores de compilaci贸n se muestran en la ventana de mensajes. Pulsando en un error, se muestra la l铆nea infractora en la ventana de edici贸n. Las entradas de men煤 Construir > siguiente/anterior error permiten navegar entre errores.
Ejecutar¶
El men煤 Construir > Ejecutar ejecuta el programa en una ventana de terminal independiente de Geany, ejecutando un comando que se establece desde el men煤 Establecer comandos de construcci贸n.
Una vez que nuestro programa o script haya terminado de ejecutarse, el script de ejecuci贸n pedir谩 que presionemos la tecla Enter. Esto nos permite revisar cualquier salida de texto del programa antes de que se cierre la ventana del terminal.
Alternativamente, podemos ejecutar los programas en la VTE. Establecer esta opci贸n desde el men煤 Editar > Preferencias > Terminal > Ejecutar programas en la VTE.
Si usamos la ventana independiente de Terminal, tenemos que asegurarnos de que Geany tiene configurado el comando que la abre. Se puede determinar desde Editar > Preferencias > Terminal.
Detener procesos en ejecuci贸n¶
Cuando hay un programa en ejecuci贸n, el comando Ejecutar en el men煤 "Construir" y el icono Ejecutar en la barra de herramientas se convierten en un bot贸n de parada para que pueda detener el programa en ejecuci贸n (y cualquier otro proceso secundario). Esto funciona internamente enviando una se帽al SIGQUIT al proceso.
De todas formas, es posible que el proceso no se pueda detener. Esto puede suceder, por ejemplo, cuando el proceso crea m谩s de un proceso hijo.
Establecer comandos de construcci贸n¶
Por defecto, compilar, compilar y ejecutar son comandos bastante b谩sicos. Geany cuenta con comandos predeterminados, pero es posible que queramos personalizarlos. Por ejemplo, para el lenguaje C podemos agregar flags de compilaci贸n para el compilador, nombres de biblioteca, etc. tal y como lo har铆amos si compilamos desde un terminal de comandos:
$ gcc -Wall -o miprograma miprograma.c -lm
La mayor parte de la configuraci贸n del men煤 Construir se realiza a trav茅s del cuadro de di谩logo Establecer comandos de compilaci贸n.
Si tenemos un proyecto abierto, podemos establecer una configuraci贸n espec铆fica en la pesta帽a Construir del cuadro de di谩logo Proyecto > Propiedades del proyecto.
Al pulsar en Construir > establecer comandos, la ventana de di谩logo se divide en tres secciones:
- Comandos de compilaci贸n seg煤n tipo de archivo.
- Comandos de compilaci贸n independientes del tipo de archivo.
- Comandos de ejecuci贸n seg煤n tipo de archivo.
Las secciones de tipo de archivo y de compilaci贸n independiente tambi茅n contienen un campo para introducir una expresi贸n regular a usar para mostrar mensajes de error y advertencia.
Las columnas de las primeras tres secciones permiten configurar:
- el texto que se muestra en el men煤
- el comando a ejecutar
- el directorio de trabajo para ejecutar el comando.
Un elemento con un nombre en blanco no se mostrar谩 en el men煤. Un directorio de trabajo vac铆o har谩 que se tome el directorio del documento de forma predeterminada.
Si no hay ning煤n documento actual, el comando no se ejecutar谩.
El cuadro de di谩logo mostrar谩 el comando a ejecutar seg煤n prioridades establecidas (configuraci贸n general, a nivel de proyecto, etc), no solo los comandos configurados para este tipo de archivos fuente. Esto garantiza que siempre veremos lo que har谩 la opci贸n del men煤 si se pulsa.
Los botones de reiniciar que hay a la derecha de cada entrada, eliminan la definici贸n que estamos editando. Cuando hagamos esto, se mostrar谩 el comando con la siguiente prioridad.
Caracteres de sustituci贸n en comandos y directorios¶
Antes de ejecutar el comando, la primera aparici贸n de cada una de las siguientes secuencias de caracteres, en el texto de los comando y de los directorios de trabajo, se sustituyen por los elementos que se especifican a continuaci贸n:
- %d: la ruta absoluta al directorio del archivo actual.
- %e: el nombre del archivo actual sin la extensi贸n ni la ruta.
- %f: el nombre del archivo actual sin la ruta.
- %p: si un proyecto est谩 abierto, la ruta base del proyecto.
- %l: el n煤mero de l铆nea en la posici贸n actual del cursor.
Atajos de teclado del men煤 Construir¶
Se pueden definir atajos de teclado para:
- los dos primeros elementos del men煤 de compilaci贸n de tipo de archivo
- los primeros tres elementos del men煤 de construcci贸n independiente
- el primer elemento del men煤 de ejecuci贸n
- los elementos del men煤 fijos (Error siguiente/anterior, Establecer comandos)
Se configura mediante el men煤 Editar > Preferencias > Combinaciones de teclas > Construir.
Navegaci贸n entre programas¶
Cuando estamos escribiendo un programa, el complemento Code Navigation incorpora funciones para ir de la declaraci贸n a la implementaci贸n de una funci贸n. Disponible para determinados lenguajes en el men煤 Editar.
Constructor de clases¶
El complemento constructor de clases es otra ayuda para escribir programas usando lenguajes que admiten una sintaxis orientada a objetos y clases. Al activarlo, pulsando en el men煤 Herramientas > Crear clase se abre una ventana de di谩logo para generar el texto de una clase, a incorporarlo al programa.
Debugger¶
Geany proporciona un men煤 Construir para compilar y ejecutar programas que estamos escribiendo, pero en principio carece de las herramientas de depuraci贸n que tendr铆amos con un Entorno Integrado de Desarrollo (un IDE). El complemento Debugger a帽ade una nueva pesta帽a Debug al panel inferior. Permite ejecutar los programas de una forma supervisada, deteni茅ndolos en un punto de ruptura, examinando variables, etc.
Inicialmente se basa en el depurador GDB, aunque contempla la posibilidad de usar otros depuradores.
Otro complemento es Scope Debugger, que proporciona una interfaz gr谩fica para GDB, con las funciones normales que esperar铆amos (ejecuci贸n paso a paso, puntos de interrupci贸n...) y algunas caracter铆sticas a帽adidas. A帽ade una pesta帽a Debug al panel inferior.
Podemos ingresar cualquier comando gdb, en cualquier momento (por supuesto, para que el comando se ejecute, la herramienta gdb debe estar instalada y disponible en nuestro ordenador).