Barra laterale

programmazione:gtk:creazione_scheletro_per_applicazioni_gtk

Creazione automatica dello scheletro per applicazioni gtk

Autore: Fabio Di Matteo
Ultima revisione: 22/12/2009

Sviluppare con le librerie gtk puo' risultare tedioso nel caso in cui ogni volta ci si deve creare a mano il sorgente base, i vari script per la generazione del makefile e la struttura delle directory del progetto. Vedremo in questo articolo di creare uno script che possa automatizzare il tutto.
Utilizzeremo il tool CMake per generare il makefile multipiattaforma.

Utilizzo dello script

L'utilizzo dello script e' immediato basta infatti impartire da console i seguenti comandi:

./auto-gtk <nome-progetto> 

per creare la directory del progetto con dentro tutte le sottodirectory e il file CMakeLists.txt .

drwxr-xr-x 2 fabio fabio 4096 2009-12-22 15:32 bin
-rw-r--r-- 1 fabio fabio 1050 2009-12-22 15:32 CMakeLists.txt
-rwxr-xr-x 1 fabio fabio   18 2009-12-22 15:32 configure
drwxr-xr-x 3 fabio fabio 4096 2009-12-22 15:32 share
drwxr-xr-x 2 fabio fabio 4096 2009-12-22 15:32 src

dentro bin verra posizionato l'eseguibile ;
in src sta il sorgente;
mentre in share c'e' una directory con lo stesso nome del progetto che verra copiata in fase di installazione in $PREFIX/share/<nome progetto> ;

Compilazione e installazione del progetto

Quando vorremo compilare e installare il progetto basteranno i seguenti comandi:

cmake . 
make
sudo make install

oppure

./configure 
make
sudo make install

Qualora si vogliano cambiare le opzioni di configurazione e' sufficente lanciare il comando

ccmake .

se il comando ccmake non e' installato lo si puo' installare in ubuntu con sudo apt-get install cmake-curses-gui

Lo script

#!/bin/sh
 
#Modificare queste variabili a piacimento
AUTHOR="Fabio Di Matteo"
VERSION="0.1.0"
 
#Controllo se e' stato fornito il nome del progetto
if [ "$1" = "" ];then
	echo "E' necessario fornire il nome del progetto come parametro."
	exit 1 ;
fi
 
#Se la directory del progetto esiste gia' esco.
mkdir $1 2>/dev/null
if [ "$?" != 0 ];then
	echo "Il progetto esiste."
	exit 1 ;
fi
 
cd $1
mkdir bin 
mkdir share && mkdir share/$1
 
echo "Genero il CMakeLists.txt ...\n"
 
echo "cmake_minimum_required(VERSION 2.6)" > CMakeLists.txt
 
echo "PROJECT($1)" >> CMakeLists.txt
echo "SET (AUTHOR \"$AUTHOR\" INTERNAL \"Author\")" >> CMakeLists.txt
echo "SET (VERSION \"$VERSION\")" >> CMakeLists.txt
 
echo "INCLUDE (FindPkgConfig)" >> CMakeLists.txt
 
echo "IF (NOT PKG_CONFIG_FOUND)" >> CMakeLists.txt
echo "	MESSAGE (FATAL_ERROR \"pkg-config not found...\") " >> CMakeLists.txt
echo "ENDIF (NOT PKG_CONFIG_FOUND)" >> CMakeLists.txt
 
echo "pkg_check_modules (GTK REQUIRED gtk+-2.0>=2.6)" >> CMakeLists.txt
 
echo "IF (NOT GTK_FOUND)" >> CMakeLists.txt
echo "	MESSAGE(FATAL_ERROR \"You don't seem to have gtk >= 2.6 development libraries installed...\")" >> CMakeLists.txt
echo "ENDIF (NOT GTK_FOUND)" >> CMakeLists.txt
 
echo "ADD_DEFINITIONS()" >> CMakeLists.txt
 
echo "INCLUDE_DIRECTORIES (. \${GTK_INCLUDE_DIRS})" >> CMakeLists.txt
 
echo "LINK_DIRECTORIES (\${GTK_LIBRARY_DIRS} )" >> CMakeLists.txt
echo "LINK_LIBRARIES (\${GTK_LIBRARIES} )" >> CMakeLists.txt
 
echo "#Indichiamo dove sara' messo l'eseguibile" >>CMakeLists.txt
echo "ADD_EXECUTABLE( bin/$1 src/main.c)" >> CMakeLists.txt
 
echo "#Se se si ha bisogno di eventuali dipendenze fornite da noi stessi" >> CMakeLists.txt
echo "#ADD_DEPENDENCIES ($1 src/main.c)" >> CMakeLists.txt
 
 
echo "#Variabili per le directory di installazione" >> CMakeLists.txt
echo "#ADD_DEFINITIONS (-DVERSION=\\\"\${VERSION}\\\")" >> CMakeLists.txt
echo "#ADD_DEFINITIONS (-DDATADIR=\\\"\${CMAKE_INSTALL_PREFIX}/share\\\")" >> CMakeLists.txt
 
 
echo "#Copia file per l'installazione" >> CMakeLists.txt
echo "#ADD_SUBDIRECTORY (src)" >> CMakeLists.txt
echo "INSTALL (TARGETS bin/$1 DESTINATION bin)" >> CMakeLists.txt
echo "INSTALL (DIRECTORY share/$1 DESTINATION share)" >> CMakeLists.txt
 
 
echo "#!/bin/sh" > configure
echo "cmake ." >> configure
chmod 755 configure
 
echo "Genero il main.c"
mkdir src && cd src
 
echo "#include <gtk/gtk.h>" > main.c
 
 
echo "int main(int argc, char** argv)
{
    GtkWidget* window;
 
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
    g_signal_connect(G_OBJECT(window), \"destroy\",
                         G_CALLBACK(gtk_main_quit), NULL);
 
    gtk_widget_show(window);
    gtk_main();
 
    return 0;
}" >> main.c

programmazione/gtk/creazione_scheletro_per_applicazioni_gtk.txt · Ultima modifica: 18/04/2018 - 15:48 (modifica esterna)