SDK Multiplataforma en C logo

SDK Multiplataforma en C

Compilar NAppGUI

❮ Anterior
Siguiente ❯

En Inicio rápido ya vimos como compilar y ejecutar los ejemplos a partir del código fuente. Ahora nos enfocaremos en la instalación del SDK con el fin de empezar a crear nuestras propias aplicaciones. Partiremos dentro de la carpeta del proyecto previamente descargada:

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

1. Enlace estático

Los siguientes comandos generarán la versión de enlace estático de las librerías que componen NAppGUI.

 
// 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 -DNAPPGUI_DEMO=NO -DCMAKE_BUILD_TYPE=Release
cmake --build build -j 4
cmake --install build --config Release --prefix /usr/local/nappgui

Para versiones de CMake inferiores a 3.13:

 
// Windows
mkdir build & cd build
cmake .. -DNAPPGUI_DEMO=NO -DCMAKE_INSTALL_PREFIX=C:/nappgui
cmake --build . --config Release
msbuild INSTALL.vcxproj /p:Configuration=Release

// macOS
mkdir build ; cd build
cmake .. -G Xcode -DNAPPGUI_DEMO=NO -DCMAKE_INSTALL_PREFIX=/usr/local/nappgui
cmake --build . --config Release
xcodebuild -target install -configuration Release

// Linux
mkdir build ; cd build
cmake .. -DNAPPGUI_DEMO=NO -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/nappgui
cmake --build .
make install

2. Enlace dinámico

Si prefieres generar NAppGUI en modo de enlace dinámico (.dll, .so, .dylib), sigue estas indicaciones.

 
// 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 -DNAPPGUI_DEMO=NO -DNAPPGUI_SHARED=YES -DCMAKE_BUILD_TYPE=Release
cmake --build build -j 4
cmake --install build --config Release --prefix /usr/local/nappgui

Para versiones de CMake inferiores a 3.13:

 
// Windows
mkdir build & cd build
cmake .. -DNAPPGUI_DEMO=NO -DNAPPGUI_SHARED=YES -DCMAKE_INSTALL_PREFIX=C:/nappgui
cmake --build . --config Release
msbuild INSTALL.vcxproj /p:Configuration=Release

// macOS
mkdir build ; cd build
cmake .. -G Xcode -DNAPPGUI_DEMO=NO -DNAPPGUI_SHARED=YES -DCMAKE_INSTALL_PREFIX=/usr/local/nappgui
cmake --build . --config Release
xcodebuild -target install -configuration Release

// Linux
mkdir build ; cd build
cmake .. -DNAPPGUI_DEMO=NO -DNAPPGUI_SHARED=YES -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/nappgui
cmake --build .
make install

Si utilizas NAppGUI en modo DLL deberás asegurar que tus futuras aplicaciones encuentren las librerías, actualizando la variable PATH de cada sistema.

 
// Windows
set PATH=C:\nappgui\bin;%PATH%

// Linux
export LD_LIBRARY_PATH=/usr/local/nappgui/bin:$LD_LIBRARY_PATH$

// macOS
export DYLD_LIBRARY_PATH=/usr/local/nappgui/bin:$DYLD_LIBRARY_PATH$

3. Opciones de CMake

Indicamos a continuación todas las opciones de CMake soportadas por NAppGUI. En Generadores, compiladores e IDEs tendrás información más detallada.

 
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=[YES|NO]: Genera las aplicaciones de ejemplo. Por defecto YES.
  • -DNAPPGUI_SHARED=[YES|NO]: Genera librerías de enlace dinámico (.dll, .so, .dylib). Por defecto NO.
  • -DNAPPGUI_WEB=[YES|NO]: Añade soporte nativo para el control WebView. Por defecto YES. Ver Deshabilitar WebView.
  • -DCMAKE_BUILD_TYPE=[Debug|Release]: En generadores mono-configuración, pe. Unix Makefiles, configura el modo de compilación. Por defecto Debug.
  • -DCMAKE_C_COMPILER=[gcc|clang|cl]: En Unix Makefiles, MinGW, MSYS o Ninja selecciona el compilador de C.
  • -DCMAKE_CXX_COMPILER=[g++|clang++|cl]: En Unix Makefiles, MinGW, MSYS o Ninja, selecciona el compilador de C++.
  • -A=[Win32|x64]: En Windows selecciona la arquitectura destino.
  • -DCMAKE_ARCHITECTURE=[x64|i386|arm|arm64]: En Linux o macOS selecciona la arquitectura destino. Por defecto, la de la máquina de compilación. arm no está soportado en macOS. i386 está restringido en macOS. Ver macOS 32bits.
  • -DCMAKE_OSX_DEPLOYMENT_TARGET=12.4: En macOS, mínima versión del sistema operativo soportada. Por defecto, la mas moderna incluida en el compilador. Ver Xcode.
  • -DCMAKE_TOOLKIT=GTK3: En Linux indica el toolkit gráfico utilizado para renderizar los elementos de la interfaz. Por el momento, solo GTK3.
  • -DCMAKE_DISABLE_CRTDBG=YES: Desactiva la librería crtdbg en Windows que controla fugas de memoria durante la ejecución. En principio, no se recomienda su uso, pero puede ser útil en proyectos que utilicen librerías de terceros con objetos estáticos o singleton.

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]
  • --build: Directorio donde se encuentran los proyectos de compilación (parámetro -B de la configuración).
  • --config: En generadores multi-configuració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. 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]
  • --install: Directorio donde se encuentran los binarios (parámetro -B de la configuración).
  • --config: Configuración a empaquetar (Debug o Release).
  • --prefix: Directorio destino de la instalación. 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 (sin el --prefix), 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
└── cmake
    ├── nappgui-config.cmake
    ├── ...
En la carpeta /bin se instalarán las DLLs, en el caso que hayamos elegido el enlace dinámico.
Los nombres de las librerías son diferentes en Windows (XXXX.lib) que en Linux/macOS (libXXXX.a).
❮ Anterior
Siguiente ❯