CMake

scritto da Cristian Lorenzetto,09/2004

 

Introduzione

'CMake' è un semplice pacchetto software facilitare la portabilità dei sorgenti C/C++ su qualsiasi piattaforma e sistema operativo: esso utilizza il programma confwrite scritto in ANSI C che, dopo aver letto un file testuale che definisce variabili e array (setupfile) , sostituisce il loro valore da un altro file di testo (inputfile) e lo scrive nel file di uscita (outputfile, che può essere anche lo stesso di quello di ingresso) cambiando in modo automantico i fineriga in base al sistema in uso.

La sintassi generale di confwrite è:

confwrite <setup file> <input file> <output file> <parametri opzionali>

dove per parametri opzionali si ha:

·         -s <un simbolo di distinzione della variabile>

·         -a <un simbolo di separatore per gli elementi di array>

·         -v per scrivere tutti i dettagli

·         -r <nome variabile definita nel file di configurazione che definisce il simbolo di ripetizione di stringhe>

·         -p <nome variabile definita nel file di configurazione che definisce il simbolo di separazione delle directory usate dal OS in uso>: ogni occorrenza di / o \ verrà sostituita con il valore della variabile

E' presente il sorgente di confwrite per la compilazione su qualsiasi piattaforma.

Grazie a questo programma, è possibile scrivere in modo automatico dei shell script e il makefile per il compilatore scelto e un header C denominato configuration.h che definisce la piattaforma che si sta utilizzando.

 

Come si usa

File di configurazione

Per definire i vari parametri del sistema in uso basta configurare il file di testo cmake.in simile al seguente:

----------------------------------------------------------------------------------------------------------------------------

Le variabili che iniziano con @ sono array

%COMPILER_VERSION% : %01% versione del compilatore

%COMPILER_HOUSE% : %borland% nome del produttore del compilatore – dipende da file

%COMPILER_NAME% : %cbuilder% nome del compilatore – dipende da file

%ARCHITECTURE_CLASS% : %x86% classe della architettura del processore in uso – dipende da file

%ARCHITECTURE_HOUSE% : %amd% produttore del processore in uso – dipende da file

%ARCHITECTURE_LEVEL% : %i586% livello del processore in uso

%ARCHITECTURE_TYPE% : %k7% tipo di processore – dipende da file

%OS_HOUSE% : %microsoft% produttore del sistema operativo

%OS_NAME% : %windows% nome generale del sistema operativo – dipende da file

%OS_SPECIFICATION% : %2000% specifica sul sistema operativo

%OS_VERSION% : %5.00% versione del sistema operativo

%OS_KERNEL_VERSION% : %% versione del kernel del sistema operativo

%OS_PATH_SEPARATOR% : %\% simbolo di separatore di directory di un path

%OS_EXE_EXT% : %exe% estensione dei file eseguibili

if no chmod command exist you insert comment

%SHELL_SCRIPT_DO_EXECUTABLE% :%rem% commento nel script shell in uso

%SHELL_SCRIPT_EXT% : %bat% estensione di files di script shell

%SHELL_SCRIPT_HEADER% : %@echo off% header per i file di script shell

----------------------------------------------------------------------------------------------------------------------------

 

%CONFIGURATION_FILE% : %windows_config.txt% il nome del file di configurazione

%VERBOSE% : %% per visualizzare i dettagli in esecuzione -v oppure lascia nessuno spazio

%EXTRA_SYMBOL% : %?% scegli un altro simbolo di definizione di variabile per confwrite diverso dal simbolo di percentuale. Il simbolo scelto appare in una riga di comando. Evita caratteri che siano significativi per la shell in uso. Per esempio ? funziona per il sistema Windows mentre da errore in Linux(necessiterebbe /?).

%REPEAT_SYMBOL% : %|% non usare il segno di percentuale

%INPUTFILES_FOR_CONFWRITE% : %file1.h,file2.h,file2.c% campo facoltativo. E' possibile utilizzare confwrite per una serie di files aggiuntivi.

----------------------------------------------------------------------------------------------------------------------------

%PROJECT_NAME% : %myprogram% nome del progetto C/C++ che devi compilare. Deve corrispondere al nome del file principale senza estensione.

%C_EXT% : %cpp%

%OBJ_EXT% : %obj%

%EXTRA_CFLAGS% : %%

%@LIBS% : %%

%@LIBFILES% : %%

%@OBJFILES% : %file1.h,file2.h%

%@INCLUDE% : %%

----------------------------------------------------------------------------------------------------------------------------

 

Il nome della variabile e la sua definizione (interposte da il carattere di assegnamento : per le stringhe, = per le espressioni matematiche di cui viene calcolato il risultato) vengono identificate dal simbolo % ,tutto il resto può essere letto come commento. Entro una espressione matematica è possibile richiamare il valore di altre variabili matematiche definite precedentemente.

Gli array contengono due variabile aggiuntive in automatico @NOME_VARIABILE.SIZE che contiene il valore della taglia dell’array e @NOME_VARIABILE.INDEX che contiene il valore del indice corrente: tale valore cambia quando si usa la variabile entro una stringa di ripetizione. Inoltre è possibile richiamare l’elemento i-esimo dell’array @NOME_VARIABILE[i].

Dal momento che il nome di alcune variabili dipendono dal nome di file, per ragioni di portabilità tutti i file e le variabili sono definiti con lettere minuscole.

Si ricorda inoltre che è possibile aggiungere altre variabili o array al file di configurazione.

Esistono dei file di configurazione di CMake già pronti (o quasi se cambia solo il compilatore e i sorgenti da compilare) per vari sistemi operativi:

 

·         Windows : windows_config.txt

·         Linux: linux_config.txt

·         CygWin: cygwin_config.txt

 

Quando configurato lancia  il comando:

 

./confwrite <file di configurazione> cmake.in  .SHELL_SCRIPT_EXTr REPEAT_SYMBOL

 

 In seguito ogni volta vorrai compilare basta che lanci il shell script appena creato cmake.bat o cmake.sh o … in funzione del sistema operativo che stai usando.

 

Esempi

Come funziona una “repeating string”

Come create un struttura C/C++ variabile ...

 

 

Per segnalare bug o chiedere maggiori informazioni publicocean0@interfree.it

Licenza

CMake è un pacchetto scritto da Cristian Lorenzetto,2004 e soggetto a General Purpose Licence GPL. Per maggiori dettagli leggi il file licence.txt entro il pachetto medesimo.

 

Dowload Cmake