Compilar programas en Zig

Compilar programas en Zig

Hasta ahora hemos usado el comando zig para ejecutar los ejemplos con zig run fichero.zig. Si tecleamos zig --help veremos esta salida:

$ zig --help

Usage: zig [command] [options]

Commands:

  build            Build project from build.zig

  fetch            Copy a package into global cache and print its hash

  init             Initialize a Zig package in the current directory

  build-exe        Create executable from source or object files

  build-lib        Create library from source or object files

  build-obj        Create object from source or object files

  test             Perform unit testing

  test-obj         Create object for unit testing

  run              Create executable and run immediately

  ast-check        Look for simple compile errors in any set of files

  fmt              Reformat Zig source into canonical form

  reduce           Minimize a bug report

  translate-c      Convert C code to Zig code

  ar               Use Zig as a drop-in archiver

  cc               Use Zig as a drop-in C compiler

  c++              Use Zig as a drop-in C++ compiler

  dlltool          Use Zig as a drop-in dlltool.exe

  lib              Use Zig as a drop-in lib.exe

  ranlib           Use Zig as a drop-in ranlib

  objcopy          Use Zig as a drop-in objcopy

  rc               Use Zig as a drop-in rc.exe

  env              Print lib path, std path, cache directory, and version

  help             Print this help and exit

  std              View standard library documentation in a browser

  libc             Display native libc paths file or validate one

  targets          List available compilation targets

  version          Print version number and exit

  zen              Print Zen of Zig and exit

General Options:

  -h, --help       Print command-specific usage

Es bastante información para empezar, pero nos fijamos sobre todo en las líneas que contienen la palabra build.

Compilar un ejecutable sencillo: build-exe

Si queremos compilar un ejecutable sin más, usamos:


zig build-exe  fichero.zig 


Este comando crea un ejecutable en el directorio de trabajo actual (cwd). El ejecutable tendrá el mismo nombre que el fichero.zig, pero sin la extensión .zig. En Windows supongo que tendrá la extensión .exe.

Si miramos la ayuda del propio zig build-exe | more (more es para poder ir viendo toda la salida poco a poco), veremos esto:

$ zig build-exe --help | more

Usage: zig build-exe   [options] [files]

       

...

Per-Module Compile Options:

  -O [mode]                 Choose what to optimize for

    Debug                   (default) Optimizations off, safety on

    ReleaseFast             Optimize for performance, safety off

    ReleaseSafe             Optimize for performance, safety on

    ReleaseSmall            Optimize for small binary, safety off

...

etc.

Esto quiere decir que podemos indicar con la opción -O, seguida de un modo, cómo Zig optimizará el ejecutable final.

Modos de compilación

Inseguro aquí significa que se desactivan las comprobaciones de seguridad en tiempo de ejecución. Por ejemplo: detección de overflow en operaciones aritméticas, check de índices fuera de rango en arrays y slices, detección de uso de punteros nulos, acceso a memoria no válida.

En modo inseguro, si el programa tiene un bug de este tipo, obtendrás un comportamiento indefinido en lugar de un fallo con un mensaje claro cuando se produzca el error en tiempo de ejecución. Por ejemplo, el programa podría crashear o -aún peor- continuar funcionando con datos corruptos. Cuidado: Zig no va a avisar de estos fallos en tiempo de compilación aunque tenga el modo seguro.

Lo más habitual es que cuando  desarrolles tu programa, utilices primero el modo Debug: crearás tests, probarás todo lo que tienes que probar, y solo después crearás un ejecutable con la opción ReleaseFast o ReleaseSmall.

Crear proyectos con Zig
Crear un proyecto: zig init
© 2025 Zen of Zig