Non c’e’ cosa piu bella che poter compilare un software, attraverso dei tools che ci mettono a disposizione le varie piattaforme. In particolare tools per Linux.
Soprattutto i software opensource sono speciali perche’ possono essere valutati e crescere attraverso le comunita’ che li usano.
Ho preso il tools kxstitch per provare a compilarlo attraverso un contenitore Docker.
Creazione Dockerfile
La prima cosa da fare e’ creare il Dockerfile con tutti i tools utili per la compilazione.
FROM ubuntu:25.04
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /app
RUN apt-get update && apt-get install -y git && \
git clone https://github.com/KDE/kxstitch
RUN apt-get install -y software-properties-common && \
apt-get update
RUN apt-get update && apt-get install -y \
# Compilatore e strumenti base
build-essential \
cmake \
extra-cmake-modules \
gettext \
pkg-config \
shared-mime-info \
doxygen \
# Qt6 Base
qt6-base-dev \
qt6-tools-dev \
# KDE Frameworks 6 (KF6) - Corrispondenti al tuo CMakeLists
libkf6config-dev \
libkf6configwidgets-dev \
libkf6completion-dev \
libkf6guiaddons-dev \
libkf6i18n-dev \
libkf6kio-dev \
libkf6textwidgets-dev \
libkf6widgetsaddons-dev \
libkf6xmlgui-dev \
libkf6doctools-dev \
# ImageMagick (richiesto da pkg_check_modules)
libmagick++-7.q16-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app/kxstitch/build
RUN cmake -DCMAKE_INSTALL_PREFIX=/app/dist -DQT_NO_CREATE_VERSIONLESS_TARGETS=ON ..
RUN make -j$(nproc)
RUN make install
CMD ["echo", "L'eseguibile è in: /app/dist"]
Questo pezzo di codice che chiameremo Dockerfile ci servira’ per creare l’immagine di builder.
Creazione Makefile
Il Makefile e’ una chicca che deve esserci per automatizzare tutto il procedimento di compilazione.
all: build install
build:
docker build -t kxstitch-builder .
install:
mkdir -p ./output_kxstitch
docker run --rm -t \
-v $(PWD):/tools \
-v $(PWD)/output_kxstitch:/app/dist \
kxstitch-builder \
/bin/bash -c "make install & /tools/collect.sh"
Come vedi si compone di un build e di un install. Basta scrivere make e abbiamo il nostro tools compilato e pronto.
Salvare Tutte le Librerie In File Unico
Kxstitch si esegue principalmente su sistemi operativi Linux che hanno interfaccia grafica KDE.
Con collect.sh si salvano tutte le librerie grafiche vicino al sorgente bin/kxstitch.
#!/bin/bash
# 1. Entra nella cartella di build e compila
mkdir -p /app/build
cd /app/build
# 2. Crea la cartella per le librerie dentro la cartella di output
mkdir -p /app/dist/lib
mkdir -p /app/dist/lib/platforms
# 3. Trova tutte le dipendenze (.so) e copiale
echo "Raccolta librerie in corso..."
ldd /app/dist/bin/kxstitch | grep "=> /" | grep -v "libc.so\|libdl.so\|libm.so\|libpthread.so" | awk '{print $3}' | xargs -I '{}' cp '{}' /app/dist/lib/
# 4. Copia il plugin fondamentale per il display (XCB)
cp /usr/lib/x86_64-linux-gnu/qt6/plugins/platforms/libqxcb.so /app/dist/lib/platforms/
echo "Compilazione e raccolta completate in /app/dist"
Esecuzione Kxstitch
Ora passiamo all’esecuzione di kxstitch. Si crea un file run_kxstitch.sh.
!/bin/bash
# Ottiene il percorso assoluto della cartella dove si trova questo script
HERE="$(dirname "$(readlink -f "$0")")"
# 1. Comunica al sistema di cercare le librerie nella cartella 'lib' locale
export LD_LIBRARY_PATH="$HERE/lib:$LD_LIBRARY_PATH"
# 2. Indica a Qt dove trovare i plugin (come xcb per lo schermo)
export QT_QPA_PLATFORM_PLUGIN_PATH="$HERE/lib/platforms"
# 3. Indica a KDE/Qt dove trovare icone, traduzioni e dati in 'share'
export XDG_DATA_DIRS="$HERE/share:$XDG_DATA_DIRS"
# 4. Opzionale: migliora l'integrazione delle icone su GNOME
export QT_QPA_PLATFORMTHEME=kde
# Avvia l'eseguibile passando eventuali argomenti (es. il nome di un file da aprire)
echo "Avvio di KXStitch da $HERE..."
"$HERE/bin/kxstitch" "$@"
Tutti i file vanno messi nella stessa cartella.
bbiamo quindi visto come compilare un tools come kxstitch con le librerie grafiche KDE.
