Documentación del Compilador
ZinjaI utiliza por defecto el compilador GCC (http://gcc.gnu.org/). Puede acceder al manual completo de GCC en http://gcc.gnu.org/onlinedocs/. Como usuario de ZinjaI, puede estar particularmente interesado en los posibles parámetros/argumentos para el mismo. La ayuda para la linea de comandos de gcc se peude encontrar en http://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Invoking-GCC.html.
Algunos argumentos comunes
Se listan a continuación algunos argumentos de uso frecuente, que podría observar en las configuraciones de proyecto y/o en plantillas de programas simples.
- -std=xxxxxx: le indica al compilador cuál de las diferentes versiones del estándar C++ (o C) utilizar. Valores usuales para xxxxx son "c++11", "c++14", "gnu++11", "gnu++14", que indican las versiones de 2011 y 2014 del estándar respectivamente, las primeras sin las extensiones/modificaciones propias de gcc, las segundas habilitando dichas extensiones/modificaciones (nota: algunas versiones viejas del compilador pueden referirse a "c++11" o "c++14" como "c++1x" o "c++1y"). Por defecto, gcc 4 utiliza g++98, gcc 5 utiliza g++14. En modo proyecto, se configura mediante "Compilación->Estandar".
- -g: le indica al compilador que debe incluir información de depuración en el ejecutable. Alternativamente se puede usar -gX, siendo X un número de 0 a 3 para indicar diferentes niveles de información (cuanto mayor el número, más información se incluye). Si no incluye información de depuración en un ejecutable no puede utilizar con el mismo las facilidades del menú "Depuración". Por esto, ZinjaI agrega el parámetro -g para todas las compilaciones de programas simples. En modo proyecto, se configura mediante "Compilación->Información de depuración".
- -O0: indica al compilador que no debe realizar optimizaciones al compilar. Las optimizaciones sirven para hacer mejorar la velocidad de ejecución de un programa, y/o su tamaño. Al optimizar, el compilador modifica internamente al programa, pero garantizando que no cambia el resultado del mismo. Por esto, un programa optimizado es más difícil de depurar que un programa sin optimizar, ya que se pierde en parte la correspondencia entre los que dice el código fuente y lo que en verdad ejecuta el programa. Puede utilizar 1, 2, 3, o S en lugar del 0 para cambiar el nivel de optimización. En modo proyecto, se configura mediante "Compilación->Nivel de optimización".
- -Wall: aumenta la cantidad de advertencias que el compilador genera al compilar, útil para mejorar el diagnóstico y ayudar a detectar posibles errores de lógico. "all" no es el mayor nivel posible (quedan fuera de este conjunto algunos casos muy particulares). Si quita esta opción gcc utiliza un nivel intermedio (relativamente bajo). Otras opciones útiles relacionadas son: "-w" para que no se genere ninguna advertencia, "-Wno-xxxxx" para que no genere la advertencia "xxxxx", y "-Werror" para que considere a las advertencias como errores. En modo proyecto, se configura mediante "Compilación->Nivel de advertencias".
- -pedantic-errors: esta opción limita el lenguaje utilizado a su versión estándar. Es decir, deshabilita las extensiones que son propias de este compilador, pero que no pertenecen al lenguaje, y por lo tanto podrían no estar disponibles en otras plataformas (ej: la posibilidad de declarar arreglos estáticos con longitudes variables, o el tipo de dato "long long" en C++98/03). En modo proyecto, se configura mediante "Compilación->estricto".
- -DXXXXXX=YYYY: define la constante de preprocesador XXXXXX, opcionalmente con el valor YYY. Es equivalente a añadir "#define XXXXX" o "#define XXXXX YYY" como primer línea del código fuente. Suele ser necesario para utilizar algunas bibliotecas que ofrecen un mismo conjunto de archivos de cabecera para diferentes versiones de la misma (por ejemplo, debug vs release). En modo proyecto, se configura mediante "Compilación->Macros a definir".
- -Ixxxxxx: (i mayúscula) indica dónde (en el directorio xxxxxx) debe el compilador buscar archivos de cabecera (los referenciados mediante s#include). Suele ser necesario cuando se utilizan bibliotecas no estándar. En modo proyecto, se configura mediante "Compilación->Directorios adicionales para buscar cabeceras".
- -Lxxxxxx: indica dónde (en el directorio xxxxxx) debe el compilador buscar los binarios de las bibliotecas que se quieren enlazar (ver más abajo "-l"). Suele ser necesario cuando se utilizan bibliotecas no estándar. En modo proyecto, se configura mediante "Enlazado->Directorios adicionales para buscar bibliotecas".
- -lxxxxxx: (L minúscula) indica al compilador que debe enlazar al ejecutable la biblioteca xxxxx (ver más arriba "-L"). Suele ser necesario cuando se utilizan bibliotecas no estándar. En modo proyecto, se configura mediante "Enlazado->Bibliotecas a enlazar".
- -s: indica al enlazador que debe remover toda información de depuración del ejecutable final. Es útil cuando se enlanzan bibliotecas externas que pueden contener información de depuración. En modo proyecto, se configura mediante "Enlazado->Información para depuración".
- -mwindows: en Windows, indica al compilador que el programa que se compila no es un programa de consola, sino que tiene su propia interfaz gráfica (o no requiere interfaz). Como efecto colateral, al utilizar esta opción se enlazan además algunas bibliotecas de Windows. En modo proyecto, se configura mediante "Enlazado->ES un programa de consola".
- -static-libstdc++ -static-libgcc: en Windows, la versión de GCC que provee mingw32 (la que utiliza por defecto ZinjaI), genera un ejecutable que depende de (enlazado dinámico) dos archivos dll propios (que puede encontrar en ZinjaI/MinGW/bin). Esta opción le indica al compilador que debe utilizar enlazado estático para estas dos bibliotecas para evitar estas dependencias.
- -finput-charset=iso-8859-1 -fexe-charset=cp437: Define qué codificación de caracteres se utiliza en el código fuente, y cual se utilizará al ejecutar el programa. Esto permite a gcc convertir las cadenas de caracteres constantes para que se muestren correctamente en el programa resultante. Es útil en Windows para visualizar correctamente ñs y acentos, ya que la consola de ejecución utiliza cp437, pero no debe utilizarse para programas que no son de consola (por ejemplo, con interfaces wxWidgets).
- -fshow-column: hace que el compilador muestre para cada error o advertencia generada, además del número de línea, la posición dentro de esa línea (columna). Esto permite a ZinjaI identificar mejor el punto en donde se produjo el error al hacer doble click sobre el mismo. Por esta razón ZinjaI lo agrega automáticamente en la mayoría de las compilaciones. Sin embargo, en las últimas versiones de gcc este argumento ya no es necesario.
- -fno-diagnostics-show-caret: por defecto, el compilador genera descripciones para los errores que incluyen una cita textual de la linea de código del error y una linea adicional que marca el punto en donde se produjo. Esta presentación es muy útil cuando se utiliza el compilador desde una consola, pero no es neceseria cuando se lo hace desde un IDE, ya que el IDE puede llevar al usuario directamente al punto del código en donde se produjo el error (doble click sobre el error). Esta opción entoces deshabilita ese comportamiento.
- -o, -c, -shared: podrá observar la presencia de estos argumentos en muchos de los comandos de compilación que ZinjaI ejecute (o en los makefiles que genere), pero el usuario no debe introducirlos nunca en los cuadros de configuración de la compilación. ZinjaI se encargará de añadirlos cuando sean encesarios. "-o" sirve para indicar el nombre del archivo resultante, "-c" para indicar que no debe enlazar, y "-shared" se utilizan al generar los binarios de bibliotecas para enlazado dinámico.