SDK Multiplataforma en C logo

SDK Multiplataforma en C

Compilar NAppGUI desde código fuente

❮ Anterior
Siguiente ❯

En Inicio rápido ya vimos como compilar y ejecutar los ejemplos a partir del código fuente. En este capítulo y en Compiladores e IDEs profundizaremos en el proceso de compilación, instalación y portabilidad entre plataformas. Una vez instalado el SDK, puedes continuar en Crear nueva aplicación.


1. Compilar librerías estáticas

 
git clone --depth 1 https://github.com/frang75/nappgui_src.git
cd nappgui_src

// Windows
cmake -S . -B build -DNAPPGUI_DEMO=NO
cmake --build build --config Release -j 4
cmake --install build --config Release --prefix C:/nappgui

// macOS
cmake -G Xcode -S . -B build -DNAPPGUI_DEMO=NO
cmake --build build --config Release -j 4
cmake --install build --config Release --prefix /usr/local/nappgui

// Linux
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j 4
cmake --install build --config Release --prefix /usr/local/nappgui

2. Compilar librerías dinámicas

 
git clone --depth 1 https://github.com/frang75/nappgui_src.git
cd nappgui_src

// Windows
cmake -S . -B build -DNAPPGUI_DEMO=NO -DNAPPGUI_SHARED=YES
cmake --build build --config Release -j 4
cmake --install build --config Release --prefix C:/nappgui

// macOS
cmake -G Xcode -S . -B build -DNAPPGUI_DEMO=NO -DNAPPGUI_SHARED=YES
cmake --build build --config Release -j 4
cmake --install build --config Release --prefix /usr/local/nappgui

// Linux
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DNAPPGUI_SHARED=YES
cmake --build build -j 4
cmake --install build --config Release --prefix /usr/local/nappgui

3. Opciones de configuración

Inicialmente, CMake debe preparar los proyectos de compilación.

 
cmake -G [Generator] -S [SourceDir] -B [BuildDir] [Options]
  • -G: Generadores CMake. Si se omite, se utilizará el valor de CMAKE_GENERATOR o uno por defecto.
  • -S: Directorio donde se encuentra el archivo CMakeLists.txt de NAppGUI.
  • -B: Directorio donde se generarán los proyectos de compilación y binarios.
  • -DNAPPGUI_DEMO=NO: No genera las aplicaciones de ejemplo. Tan solo las librerías esenciales del SDK.
  • -DCMAKE_BUILD_TYPE=Release: En generadores mono-configuración, pe. Unix Makefiles, configura para compilar en modo release. Por defecto: Debug.
  • -DNAPPGUI_SHARED=YES: Genera librerías de enlace dinámico (.dll, .so, .dylib), en lugar de enlace estático (por defecto).

4. Opciones de compilación

Una vez generados los scripts en el paso anterior, lanzamos la compilación mediante CMake.

 
cmake --build [BuildDir] --config [Debug|Release] -j [NumProcs]
  • BuildDir: Directorio donde se encuentran los proyectos de compilación (-B en la configuración).
  • --config: En generadores multiconfiguración, pe. Visual Studio, indica que configuración compilar (Debug o Release).
  • -j: Número de procesos o hilos concurrentes de compilación.

Tras la compilación tendremos en [BuildDir]/[Debug|Release]/bin los ejecutables y librerías dinámicas generadas. En /lib las librerías estáticas.


5. Empaquetado e instalación

Tras la compilación empaquetamos los binarios y cabeceras con el fin de tenerlos disponibles a la hora de crear nuestras propias aplicaciones.

 
cmake --install [BuildDir] --config [Debug|Release] --prefix [PackagePath]
  • BuildDir: Directorio donde se encuentran los proyectos de compilación (-B en la configuración).
  • --config: Configuración a empaquetar (Debug o Release).
  • PackagePath: Directorio destino del paquete. Si se omite, CMake utilizará los directorios de sistema por defecto: /usr/local en UNIX o C:/Program Files/${PROJECT_NAME} en Windows.
Para instalar en los directorios de sistema, es posible que tengamos que ejecutar cmake install en modo administrador.

En la ruta de destino tendremos esta estructura de archivos y directorios:

 
nappgui
├── bin
│   ├── nrc
├── inc
│   ├── core
│   │   ├── array.h
│   │   ├── arrpt.h
│   │   ├── ...
│   ├── draw2d
│   │   ├── color.h
│   │   ├── dctx.h
│   │   ├── ...
│   ├── geom2d
│   │   ├── box2d.h
│   │   ├── box2d.hpp
│   │   ├── ...
│   ├── gui
│   │   ├── button.h
│   │   ├── cell.h
│   │   ├── ...
│   ├── inet
│   │   ├── base64.h
│   │   ├── httpreq.h
│   │   ├── ...
│   ├── nappgui.h
│   ├── osapp
│   │   ├── osapp.def
│   │   ├── osapp.h
│   │   ├── ...
│   ├── osbs
│   │   ├── bfile.h
│   │   ├── bmutex.h
│   │   ├── ...
│   ├── osgui
│   │   ├── osbutton.h
│   │   ├── oscombo.h
│   │   ├── ...
│   ├── sewer
│   │   ├── arch.hxx
│   │   ├── blib.h
│   │   ├── ...
├── lib
│   ├── libcore.a
│   ├── libdraw2d.a
│   ├── libgeom2d.a
│   ├── libgui.a
│   ├── libinet.a
│   ├── libosapp.a
│   ├── libosbs.a
│   ├── libosgui.a
│   ├── libsewer.a
└── prj
    ├── CMakeTarget.cmake
    ├── ...
    └── version.txt
❮ Anterior
Siguiente ❯