Posts tagged ‘sviluppo’

2 aprile 2009

CMake

di Spinus
Ho iniziato da poco ad usare CMake e mi sono subito affezionato 🙂
Cos’è CMake?
E’ un tool che permette di generare i Makefiles per un progetto C/C++.
Ma allora non è più comodo usare make?
Sì, ma CMake è cross-platform, quindi permette di generare oltre ai Makefile Unix, anche Makefile per MinGW e, addirittura, può creare i .vcproject per Visual Studio!
Quindi se il progetto che si sta scrivendo utilizza librerie portabili, basta scrivere le regole di generazione poi digitare
cmake .
  • sotto Unix verrà generato un Makefile
  • sotto Windows verrà generato un progetto per Visual Studio
    • oppure un Makefile per MinGW se si utilizza il comando
    • cmake -G”MinGW Makefiles” .
Come si scrivono le regole?
Ecco un semplice esempio: il progetto chiamato esempio è costituito dal file codice.cpp

#nome che identifica il progetto

project(esempio)


#directory dove il compilatore deve cercare i sorgenti

include_directories (${esempio_SOURCE_DIR})

#flag del compilatore C++

SET(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -Wall -DDEBUG”)

#regola che specifica il nome dell’eseguibile e che file utilizzare per compilarlo

add_executable (esempio codice.cpp)

Per esempi più complessi e interessanti rimando alla documentazione ufficiale di CMake

Articolo aggiornato – Data pubblicazione: Feb 21, 2008 @ 23:04

Ho scoperto l’esistenza di CPack, che permette di generare pacchetti per distribuire i binari in molti formati tar/DEB/RPM utilizzando gli stessi concetti di CMake; non ho ancora avuto tempo di provarlo, ma credo possa rivelarsi molto utile!
http://www.cmake.org/Wiki/CMake:CPackPackageGenerators

15 maggio 2008

Java Jni e MinGW

di Spinus

Per esigenze lavorative mi sono scontrato con Jni, che permette a codice Java di chiamare o di essere chiamato da applicazioni native (scritte in C o C++).
Il procedimento per scrivere una classe che utilizza metodi nativi è un po’ macchinoso, ma è abbastanza semplice:

  • si scrive una classe Java che contiene lo scheletro dei  metodi che dovranno essere eseguiti (questi metodi devono essere preceduti dalla keyword native)
  • si compila la classe:
    javac nomeclasse.java
  • si crea l’header che contiene i prototipi delle funzioni:
    javah -jni nomeclasse
  • si implementano i metodi (aggiungendo tutte le librerie necessarie)
  • si compila il file sorgente e si crea una dll:
    gcc -I"C:\Program Files\Java\jdk1.6.0_02\include" -I"C:\Program Files\Java\jdk1.6.0_02\include\win32" -c nome_scheletro_generato -o nome_file_dll.o
    gcc -shared -Wl,--kill-at -o nome_file_dll.dll nome_file_dll.o eventuale_file.lib
  • si importa la dll nella classe java e da quel momento i metodi potranno essere invocati come fossero metodi di una qualsiasi classe java:static
    System.loadLibrary ("nome_file_dll");

E MinGW cosa centra? Ho avuto un piccolo problema utilizzando MinGW, perché il loader di Java non ne voleva sapere di caricare la dll che avevo creato…dopo un po’ di hacking ho scoperto che MinGW usava un name mangling diverso da quello che si aspettava il loader, quindi ho dovuto aggiungere l’opzione -Wl,–kill-at (per una spiegazione più approfondita vedere i link in nota).

P.S. ho testato questa guida sotto Windows, ma con le opportune modifiche si può utilizzare anche sotto Linux, in questo caso, però, bisognerà controllare il metodo di chiamata di default di gcc (_stdcall)

Riferimenti :
http://www.javaworld.com/javaworld/javatips/jw-javatip23.html

http://www.willus.com/mingw/yongweiwu_stdcall.html

http://forum.java.sun.com/thread.jspa?threadID=5200233

13 maggio 2008

WinMerge

di Spinus

Ecco un utilissimo programma per chi sviluppa sotto Windows: Winmerge

Permette di visualizzare graficamente e intuitivamente le differenze tra due file e farne il merge; inoltre può operare ricorsivamente su directory e, quindi, permette di visualizzare tutti i file modificati in progetti di grandi dimensioni!

Vista file:

Vista directory:

6 marzo 2008

CMake e Windows

di Spinus

Avete seguito la breve guida su CMake e adesso volete compilare il vostro programma sotto Windows, ma come fare senza installare pesanti programmoni per sviluppare (detti anche IDE) ?

E’ molto semplice, basta usare MinGW!

Come installo MinGW?

Dalla pagina di download di MinGW scaricare MinGW Automated Installer che si occuperà di scaricare tutte gli archivi necessari (selezionare i linguaggi che si vogliono utilizzare e mingw make)

E il debugger?

La soluzione più semplice è installare la versione di GDB disponibile sul sito di MinGW

Nota: scaricare sempre la versione “current release”, così si è sicuri di utilizzare versioni stabili.

Una volta installati i programmi necessari non resta che aggiungere alla variabile d’ambiente PATH, il percorso contentente gli eseguibili di MinGW: (aggiongere dir)

Come compilare?

Creare il makefile con il comando

cmake -G”MinGW Makefiles” .

compilare utilizzando il comando make

Gdb non è molto comodo? Come posso debuggare in modo più semplice?

In questo caso bisogna installare Eclipse o un altro IDE che supporti i makefile di MinGW e Gdb!

Importare i sorgenti in Eclipse si può creare un progetto make C/C++ e importare “da filesystem” i file che compongono il programma da compilare (probabilmente ci sarà qualche settaggio da rifinire).
Per debuggare il programma basterà creare una configurazione di debug e impostare come debugger Gdb o mingw debugger e, poi, sarà sufficiente impostare i breakpoint voluti e far partire l’esecuzione!

P.S. questa guida è un bozza, ho seguito le procedure qui descritte e tutto funziona, ma quando ho tempo proverò su un altro pc per assicurarmi di non aver dimenticato nulla!

UPDATE: Esiste un frontend grafico per gdb che funziona sotto windows: si chiama insight. Per utilizzarlo basta scaricare mingw-insight-6.3.exe (o altre versioni) e scompattarlo nella directory di MingGW. Insight contiene tra l’altro anche gdb.

Io l’ho provato ed è molto pratico!