Development/Tutorials/CMake (fr): Difference between revisions

From KDE TechBase
(Création et début de la traduction)
 
No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/CMake}}
 


== Introduction ==
== Introduction ==
Line 21: Line 21:


Une fois le téléchargement terminé, désarchivez et compilez-le :
Une fois le téléchargement terminé, désarchivez et compilez-le :
<code>
<syntaxhighlight lang="text">
$ mkdir cmake-build
$ mkdir cmake-build
$ cd cmake-build
$ cd cmake-build
Line 27: Line 27:
$ make
$ make
$ make install
$ make install
</code>
</syntaxhighlight>


Par défaut, CMake sera installé dans /usr/local, alors assurez-vous d'avoir /usr/local/bin dans votre répertoire d'exécution ($PATH). Pour changer ce répertoire (exemple : /usr sous Debian), ajoutez l'option '--prefix=PATH' à la commande boostrap.
Par défaut, CMake sera installé dans /usr/local, alors assurez-vous d'avoir /usr/local/bin dans votre répertoire d'exécution ($PATH). Pour changer ce répertoire (exemple : /usr sous Debian), ajoutez l'option '--prefix=PATH' à la commande boostrap.
Line 46: Line 46:


En supposant que vous avez kdelibs/ dans ~/src/kdelibs/ (utilisez $ locate kdelibs/ au besoin), utilisez ces commandes :
En supposant que vous avez kdelibs/ dans ~/src/kdelibs/ (utilisez $ locate kdelibs/ au besoin), utilisez ces commandes :
<code>
<syntaxhighlight lang="text">
$ ls
$ ls
kdelibs/
kdelibs/
Line 52: Line 52:
$ cd kdelibs-build
$ cd kdelibs-build
$ cmake ../kdelibs
$ cmake ../kdelibs
</code>
</syntaxhighlight>
Ceci générera les Makefiles pour construire kdelibs/ dans kdelibs-build/.
Ceci générera les Makefiles pour construire kdelibs/ dans kdelibs-build/.


Line 60: Line 60:
En supposant que vous avez kdelibs\ dans c:\daten\kde4, utilisez ces commandes :
En supposant que vous avez kdelibs\ dans c:\daten\kde4, utilisez ces commandes :
So, let's say you have kdelibs\ in c:\daten\kde4, then do the following:
So, let's say you have kdelibs\ in c:\daten\kde4, then do the following:
<code>
<syntaxhighlight lang="text">
c:\daten\kde4> cd kdelibs\win
c:\daten\kde4> cd kdelibs\win
c:\daten\kde4> cmake
c:\daten\kde4> cmake
Line 69: Line 69:
c:\daten\kde4> cd kdelibs-build
c:\daten\kde4> cd kdelibs-build
c:\daten\kde4\kdelibs-build> cmake ..\kdelibs
c:\daten\kde4\kdelibs-build> cmake ..\kdelibs
</code>
</syntaxhighlight>


Ceci générera les Makefiles pour construire kdelibs\ dans kdelibs-build\. Lisez la page [[Projects/KDE_on_Windows|KDE sous Windows]] pour plus d'informations sur la compilation de KDE sous Windows.
Ceci générera les Makefiles pour construire kdelibs\ dans kdelibs-build\. Lisez la page [[Projects/KDE_on_Windows|KDE sous Windows]] pour plus d'informations sur la compilation de KDE sous Windows.
Line 75: Line 75:
==== Fichies de projet KDevelop 3 ====
==== Fichies de projet KDevelop 3 ====
Si vous préférez utiliser des fichiers de projet pour KDevelop 3 (qui sont simplement des Makefiles accompagnés de quelques données pour KDevelop), lancez-le de cette façon :
Si vous préférez utiliser des fichiers de projet pour KDevelop 3 (qui sont simplement des Makefiles accompagnés de quelques données pour KDevelop), lancez-le de cette façon :
<code>
<syntaxhighlight lang="text">
$ cmake ../kdelibs -GKDevelop3
$ cmake ../kdelibs -GKDevelop3
</code>
</syntaxhighlight>
Utilisez 'cmake -h' pour savoir quels générateurs CMake support ainsi que ses autres options.
Utilisez 'cmake -h' pour savoir quels générateurs CMake support ainsi que ses autres options.


Line 83: Line 83:
Pour trouver le réperoire de Qt4, CMake cherche qmake dans le répertoire d'exécution. CMake ''n'utilisez pas'' la variable d'environnement QTDIR. Assurez-vous d'abord que qmake se trouve dans le répertoire d'exécution qui vous utilisez.
Pour trouver le réperoire de Qt4, CMake cherche qmake dans le répertoire d'exécution. CMake ''n'utilisez pas'' la variable d'environnement QTDIR. Assurez-vous d'abord que qmake se trouve dans le répertoire d'exécution qui vous utilisez.


==== More Details ====
==== Aller plus loin ====
When CMake has finished, it will have created a file called "CMakeCache.txt". This file contains all the settings CMake has detected on your system. If you want to run CMake with another generator or you want CMake to detect everything again, delete this file.
Une fois que CMake a terminé, il va créer un fichier nommé "CMakeCache.txt". Ce fichier contient tous les paramètres que CMake a détecté sur votre système. si vous voulez lancer CMake avec un autre générateur ou que vous voulez que CMake refasse la détection, supprimez ce fichier.


If CMake didn't find something, but you know it is somewere on your box, you can tell CMake manually where to find it. CMake uses variables to store this information. These variables are cached in the already mentioned file CMakeCache.txt. You have three options to adjust these variables manually:
Si CMake ne trouve pas quelque chose, mais que vous savez où il est, vous pouvez lui dire manuellement où ceci se trouve. CMake utilise des variables pour stocker ses informations. Ces variables sont situées dans le fichier mentionné ci-dessus : CMakeCache.txt. Il existe trois manières de configurer ces variables :
* tell CMake the correct value via the command line: cmake ../kdelibs -DNAME_OF_THE_VARIABLE=value
* donner à CMake la valeur correcte via la ligne de commande : cmake ../kdelibs -DNOM_DE_LA_VARIABLE=valeur
* use ccmake, which provides a curses based GUI to adjust the CMake variables (run: ccmake ../kdelibs)
* utiliser ccmake, qui fourni un GUI basé sur curse pour éditer les variables CMake (lancez : ccmake ../kdelibs)
* edit the file CMakeCache.txt directly (not recommended)
* éditer directement le fichier CMakeCache.txt (déconseillé)


You should run "ccmake ../kdelibs" at least once so that you get an impression which variables CMake uses. Press "T" to see also the "advanced" variables.  So, if CMake didn't find something, start ccmake and adjust it manually.
Vous pouvez lancer "ccmake ../kdelibs" au moins une fois, dans le but d'avoir une idée des variables que CMake utilise. Appuyez sur "T" pour voir également les variables "avancées".


==== Command Line Variables ====
==== Variables en ligne de commande ====


Some cmake command line variables you may want to set:
Quelques variables en ligne de commande de cmake que vous pouvez être amené(e) à modifier :
* '''CMAKE_INSTALL_PREFIX''': cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 is the equivalent to ./configure --prefix=/opt/kde4
* '''CMAKE_INSTALL_PREFIX''': cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 qui est l'équivalent de ./configure --prefix=/opt/kde4
* '''[[Development/CMake/Build_Types|CMAKE_BUILD_TYPE]]''': decide which type of build you want. You can choose between "debugfull", "Debug", "Profile", "RelWithDebInfo" and "Release". The default is "RelWithDebInfo". Please refer to page [[Development/CMake/Build_Types|CMake Build Types]] for a more detailed explanation.
* '''[[Development/CMake/Build_Types|CMAKE_BUILD_TYPE]]''': pour choisir le type de build que vous désirez. Vous pouvez choisir entre "debugfull", "Debug", "Profile", "RelWithDebInfo" et "Release". Le build par défaut est "RelWithDebInfo". Référez-vous à la page sur [[Development/CMake/Build_Types|les types de builds de CMake]] pour plus d'informations.
* '''KDE4_BUILD_TESTS=ON''': creates Makefiles with build test programs and also provides 'test' targets
* '''KDE4_BUILD_TESTS=ON''': créer des Makefile avec des programmes de test du build et fourni aussi des cibles 'test'.
* '''KDE4_TEST_OUTPUT=xml''': Unit tests using the QTestLib framework will create xml formatted logfiles.
* '''KDE4_TEST_OUTPUT=xml''': Tests utilisant la le framework QTestLib pour créer des fichiers de log en XML.
* '''KDE4_DISABLE_MULTIMEDIA=ON''': Build KDE without any multimedia (audio and video) support.
* '''KDE4_DISABLE_MULTIMEDIA=ON''': Construit KDE sans aucun support multimédia (audio et vidéo).
* '''BUILD_foo=OFF''': disables the build for the project in subdirectory 'foo'.
* '''BUILD_foo=OFF''': désactive les build pour le projet dans le répertoire 'foo'.
* '''WITH_foo''': there are several options, e.g. WITH_CUPS or WITH_Jasper. If you disable them, cmake will not even try to find this package. If it is enabled, cmake will try to find it. If it fails with this, you can still adjust it manually as described above.
* '''WITH_foo''': il y a différentes options, par exemple WITH_CUPS ou WITH_Jasper. Si vous voulez les désactiver, cmake n'ira rien chercher dans ce paquet. Si ils sont activés, cmake tentera de les trouver. Si il n'y arrive pas, ajustez les variables comme décrit plus haut.


=== Environment Variables ===
=== Vaiables d'environnement ===
If you have headers and libraries installed in non-standard locations that cmake cannot find (e.g., fink on Mac OSX installs to /sw), then set the following as environment variables. This can be also very
Si vous avez des heades et des bibliothèques installés dans des chemins non-standards, que cmake ne peut trouver, modifiez les variables d'environnement suivantes. Elles peuvent être très utiles, par exemple si vous voulez installer kdesupport dans ~/install/kdesupport.
useful e.g. if you install kdesupport to ~/install/kdesupport .
Voci quelques conventions de nommage, qui ne marcherotn pas comme argument dans avec la command cmake :
Despite the similar naming convention, these will not work as arguments on the cmake command line:
* '''CMAKE_INCLUDE_PATH''', par exemple : CMAKE_INCLUDE_PATH=/sw/include
* '''CMAKE_INCLUDE_PATH''', eg. export CMAKE_INCLUDE_PATH=/sw/include
* '''CMAKE_LIBRARY_PATH''', par exemple : CMAKE_LIBRARY_PATH=/sw/lib
* '''CMAKE_LIBRARY_PATH''', eg. export CMAKE_LIBRARY_PATH=/sw/lib
* '''CMAKE_PROGRAM_PATH''', par exemple : CMAKE_LIBRARY_PATH=/sw/bin
* '''CMAKE_PROGRAM_PATH''', eg. export CMAKE_LIBRARY_PATH=/sw/bin


With CMake 2.6.0 and above the same effect can be achieved by setting just one
With CMake 2.6.0 and above the same effect can be achieved by setting just one
Line 118: Line 117:




For more information on variables, see [http://www.cmake.org/Wiki/CMake_Useful_Variables this cmake.org wiki page]
Pour plus d'informations, vous pouvez consulter [http://www.cmake.org/Wiki/CMake_Useful_Variables la page de ce wiki sur CMake]


=== Going Further ===
=== Aller plus loin ===
If cmake finishes with "Generating done" then there was no errors, but if it finishes with "Configuring done" then there was errors that you have to fix. Once cmake finishes successfully, run your buildtool (i.e. make, KDevelop, XCode or MSVC) and build and wait until it has finished. Then "make install".  
Si cmake finit avec "Generating done" et c'est qu'il n'y a eu aucune erreur, alors que si il finit avec "Configuring done" c'est qu'il y en a eu, et que vous devez les corriger. Une fois que cmake a fini de s'exécuter, lancez votre outil de build (par exemple make, KDevelop, XCode, ou MSVC), compilez-le, et attentez que ce soit fini. A ce moment, lancez "make install".


If you got a failure that says something like
Si vous avez une erreur dans ce genre :
<code>
<syntaxhighlight lang="text">
CMake Error: This project requires some variables to be set,
CMake Error: This project requires some variables to be set,
and cmake can not find them.
and cmake can not find them.
Please set the following variables:
Please set the following variables:
X11_XTest_LIB (ADVANCED)
X11_XTest_LIB (ADVANCED)
</code>
</syntaxhighlight>
then you may have a missing library (or other dependency). To find
il se peut qu'il vous manque une bibliothèque (ou toute autre dépendance). Pour savoir laquelle, cherchez dans ''cmake/modules directory'' pour savoir quelle variable cmake n'arrive pas à trouver. Dans l'exemple précédent, il s'agit de
out which library, search in the cmake/modules directory for
<syntaxhighlight lang="text">
the variable that cmake can't find. In the example above, it is
<code>
find_library(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
find_library(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
</code>
</syntaxhighlight>
So the missing library is Xtst. You then need to find it (perhaps installing a libXtst-devel library) and re-run cmake.
Donc, la bibliothèque manquante est Xtst. Vous devez la trouver (peut-être en installant la bibliothèque libXtst-devel), et relancez cmake.


== Using CMake for a Simple Application ==
== Utiliser CMake pour une petite application ==


Here's the most simple CMakeLists.txt:
Voici le plus simple CMakeLists.txt possible :
<code>
<syntaxhighlight lang="text">
add_executable(hello main.cpp)
add_executable(hello main.cpp)
</code>
</syntaxhighlight>
This will create an executable named "hello" (or "hello.exe" under Windows) from the source file main.cpp. You can mix C and C++ files as you want. You can have multiple executables and libraries in one CMakeLists.txt. The same source file can be used in multiple targets, it will be compiled for each target independently from the other targets. Probably the most important part of the cmake language are the variables:
Il sert à créer un exécutable "hello" (ou "hello.exe" sous Windows") à partir du fichier source main.cpp. Vous pouvez mettre à la fois des fichiers C et C++ si besoin est. Vous pouvez également mettre différents exécutables et librairies dans CMakeList.txt. Le même fichier source peut être utilisé dans différents projets, et il sera compilé pour chacun des projets. La part la plus important du langage de CMake est les variables :
<code>
<syntaxhighlight lang="text">
set( MY_SOURCES main.cpp widget.cpp)
set( MY_SOURCES main.cpp widget.cpp)
message(STATUS "my sources: ${MY_SOURCES}")
message(STATUS "my sources: ${MY_SOURCES}")
</code>
</syntaxhighlight>
So, use the SET() command to set the value of a variable. If you list more than one string, the variable will be a list.   A list is a list of strings separated by semicolons. If you set it to only one item, it will have just that value. To get the value of a variable, use ${VAR}.
Donc, utilisez la commande SET() pour définir la valeur d'une variable. Si vous mettez plus d'une chaîne de caractères, la variable sera une liste. Une liste est une liste de chaînes séparées par des virgules. Si vous voulez un seul élément, la variable n'aura que cet élément pour valeur. Pour avoir la valeur d'une variable, utilisez : ${NOM_DE_LA_VARIABLE}.
You can iterate over a list using FOREACH():
Vous pouvez parcourir une liste en utilisant FOREACH() :
<code>
<syntaxhighlight lang="text">
foreach(next_ITEM ${MY_SOURCES})
foreach(next_ITEM ${MY_SOURCES})
   message(STATUS "next item: ${next_ITEM}")
   message(STATUS "next item: ${next_ITEM}")
endforeach(next_ITEM ${MY_SOURCES})
endforeach(next_ITEM ${MY_SOURCES})
</code>
</syntaxhighlight>
The commands in CMake are case-insensitive.  Names of variables and names of parameter are case-sensitive.
Les commandes de CMake sont sensibles à la casse, de même que les noms de variables ou de paramètres.


You can also test for various things:
Vous pouvez aussi tester divers choses :
<code>
<syntaxhighlight lang="text">
if (UNIX)
if (UNIX)
   message(STATUS "This is UNIX (including OS X and CygWin)")
   message(STATUS "This is UNIX (including OS X and CygWin)")
Line 167: Line 164:
   set(MY_SRCS ${MY_SRCS} winextra.cpp)
   set(MY_SRCS ${MY_SRCS} winextra.cpp)
endif (MSVC)
endif (MSVC)
</code>
</syntaxhighlight>
In this second example  you can see also how to append items to a list.
Dans ce second exemple, on ajoute un élément dans une liste.


In the cmake Wiki there is also a [http://www.cmake.org/Wiki/HowToBuildKDE4Software  tutorial] on using cmake to build KDE 4 software. It is recommended reading.
Dans le wiki de CMake, il y a également un [http://www.cmake.org/Wiki/HowToBuildKDE4Software  tutoriel] pour utiliser CMake dans la compilation de KDE4. Sa lecture est recommandée.


== Using CMake for a KDE Project ==
== Utiliser CMake dans le cadre de KDE4 ==


Here's a basic CMakeList file that builds a small KDE 4 project:
Voici un CMakeList.txt basique pour construire un petit projet KDE4 :
<code>
<syntaxhighlight lang="text">
project( kde4project )
project( kde4project )
find_package( KDE4 REQUIRED )
find_package( KDE4 REQUIRED )
Line 187: Line 184:


install( TARGETS kde4project  ${INSTALL_TARGETS_DEFAULT_ARGS} )
install( TARGETS kde4project  ${INSTALL_TARGETS_DEFAULT_ARGS} )
</code>
</syntaxhighlight>


''target_link_libraries'' contains the development libraries that are linked to your program. E.g. if you want to link to libtidy-devel, your library file name may be called /usr/local/lib/libtidy.a. You would then add -ltidy to a gcc call. Here, you add ''tidy'' to your target_link_libraries. If possible, use pre-defined variables or macros like ${KDE4_KDEUI_LIBS}.
''target_link_libraries'' contient les librairies de développement qui sont utilisées dans votre programme. Par exemple, si vous voulez utiliser libtidy-devel, le nom de fichier de la librairie est probablement ''/usr/local/lib/libtidy.a''. Vous pouvez alors ajouter -ltidy à la commande d'appel de gcc. Dans ce cas, ajoutez ''tidy'' dans target_link_libraries. Si possible, utilisez les variables et macros prédéfinies, telles que ${KDE4_KDEUI_LIBS}.


''install (TARGETS'' is where the target will finally be installed. If you do not have this line, make install will not be available.
''install (TARGETS'' est l'endroit où les fichiers obtenus seront installés. Si vous n'avez pas cette ligne, make install ne sera pas possible.


Variables, macros and other useful information specific to KDE can be found at the [[Development/CMake/Addons for KDE|CMake addons for KDE]] page.
Les variables, macros, et autres informations utiles spécifiques à KDE peuvent être trouvées sur la page [[Development/CMake/Addons for KDE|des modules pour CMake]].


== Extending CMake ==
== Scripts pour CMake ==
CMake can be extended using cmake scripts. CMake comes with a number of scripts; under UNIX they are by default installed to /usr/local/share/CMake/Modules/. The KDE libraries install also a set of cmake modules into share/apps/cmake/modules/. The files located there will be preferred over the ones in the system global cmake module path.  
CMake peut être étendu avec des scripts. CMake a par défaut un certain nombre de scripts ; sous Unix ils sont installés dans /usr/local/share/CMake/Modules/. Les librairies de KDE installent également des modules dans share/apps/cmake/modules/. Les fichiers s'y trouvant seront utilisé en priorité, devant ceux du dossier des modules globaux au système.
For detecting software packages there are FindFOO.cmake files, see [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware here] for more information.
Pour plus d'informations sur comment détecter les paquets qui se trouvent dans les fichiers FindFOO.cmake, [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware cliquez ici].
You can also write macros in CMake. They are powerful enough to do most things you will need to build software, but they are not intended to be used as a general purpose programming language.
Vous pouvez également écrire des macros pour CMake. Elles sont puissantes et peuvent être requises pour construire certains logiciels, mais elles ne sont pas faites pour remplacer un langage de programmation.


== Converting autotools-based KDE software to CMake ==
== Convertir des logiciels de KDE basés sur autotools vers CMake ==
In kdesdk/cmake/ you can find a script am2cmake . This is a ruby script, so you need to have ruby installed. Run am2cmake in the toplevel directory of your sources:
Dans kdesdk/cmake/ vous pouvez trouver le script am2cmake. Il s'agit d'un script Ruby, il est donc requis que Ruby soit installé sur votre système. Lancez am2cmake dans le dossier principal de vos sources :
<code>
<syntaxhighlight lang="text">
$ cd src/mykooltool/
$ cd src/mykooltool/
$ am2cmake --kde4
$ am2cmake --kde4
</code>
</syntaxhighlight>
Don't forget the switch "--kde4", otherwise it won't generate files suitable for KDE 4 software. The converted files 'may' work as they are, but complicated projects will require some additional editing.
N'oubliez pas l'option "--kde4", car sinon, les fichiers générés ne seront pas adaptés à un logiciel pour KDE. Les fichiers convertis son 'susceptibles' de fonctionner tels quels, mais les projets complexes requierent quelques modifications supplémentaires.


You may have to:
Il se peut que vous ayez à :
* add more include direcories, using INCLUDE_DIRECTORIES()
* ajouter des répertoires d'include en utilisant INCLUDE_DIRECTORIES()
* add more link libraries, using TARGET_LINK_LIBRARIES()
* ajouter des bibliothèques de link en utilisant TARGET_LINK_LIBRARIES()
* add some compile switches, using ADD_DEFINITIONS()
* ajouter des switch de compilation en utilisant ADD_DEFINITIONS()
* add some "configure" checks, see [http://www.cmake.org/Wiki/CMake_HowToDoPlatformChecks How To Do Platform Checks] and [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware How To Find Installed Software]
* ajouter des vérification "configure" ; lisez  [http://www.cmake.org/Wiki/CMake_HowToDoPlatformChecks comment effectuer des vérifications de la plateforme] et [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware comment trouver les logiciels déjà installés].
* un fichier AdditionalInfo.txt est créé. Il vous permettra de voir tous les *.in et *.in.in de votre projet. Les noms de fichier dans ce fichier sont ceux qui doivent être convertis manuellement pour CMake.
* take special care of former libtool convenience libraries. They are not supported by cmake, instead there will be a file ConvenienceLibs.cmake created.  In this file you will find for every convenience lib a variable, which contains all source files of this convenience lib.  For the targets which linked to this convenience lib, just add the variable to the sources.
* take special care of former libtool convenience libraries. They are not supported by cmake, instead there will be a file ConvenienceLibs.cmake created.  In this file you will find for every convenience lib a variable, which contains all source files of this convenience lib.  For the targets which linked to this convenience lib, just add the variable to the sources.
* a file AdditionalInfo.txt will be created.  There you will see all *.in and *.in.in files of your project. The stuff done in these files will have to be converted manually to cmake.





Latest revision as of 15:21, 19 July 2012


Introduction

CMake lit des fichiers de script et produit des fichiers natifs pour la plateforme sur laquelle il a été lancé. Il peut créer des Makefile GNU, ou des projets KDevelop, XCode ou Visual Studio.

CMake est un logiciel libre sous license BSD. Il est développé par Kitware Inc..

Vosu trouverez plus d'informations relatives à CMake sur la page principale sur CMake de ce site.

Pourquoi utiliser CMake ?

CMake est un outil officiel de KDE 4, suite à un choix effectué en Mars 2006, principalement pour ses qualités techniques par rapport aux précédents outils de KDE, tels automake ou unsermake :

  • CMake est développé indépendemment de KDE , et peut être utilisé dans d'autres projets que celui-ci.
  • La durée de compilation est plus courte, notemment grâce à la non-utilisation de libtools
  • Le build des fichiers est plus facile à écrire

Comment compiler KDE avec CMake ?

Télécharger et installer CMake

Linux, BSD, et autres systèmes Unix

Cliquez ici pour télécharger la dernière version de CMake.

Une fois le téléchargement terminé, désarchivez et compilez-le :

$ mkdir cmake-build
$ cd cmake-build
$ ../bootstrap
$ make
$ make install

Par défaut, CMake sera installé dans /usr/local, alors assurez-vous d'avoir /usr/local/bin dans votre répertoire d'exécution ($PATH). Pour changer ce répertoire (exemple : /usr sous Debian), ajoutez l'option '--prefix=PATH' à la commande boostrap.

Lisez ces instructions si vous voulez utiliser la version en cours de dévloppement.

Windows

Cliquez ici pour télécharger la dernière version de CMake.

Une fois téléchargé, lancez l'installeur de CMake.

Lisez ces instructions si vous voulez utiliser la version en cours de dévloppement.

Lancer CMake

Linux, BSD, et autres systèmes Unix

Vous devez lancer CMake pour générer les ficheirs de build pour votre système. Les builds in-source et out-of-source sont supportés par CMake, mais actuellement, les builds in-sources sont empêchés par l'implémentation de KDE.

En supposant que vous avez kdelibs/ dans ~/src/kdelibs/ (utilisez $ locate kdelibs/ au besoin), utilisez ces commandes :

$ ls
kdelibs/
$ mkdir kdelibs-build
$ cd kdelibs-build
$ cmake ../kdelibs

Ceci générera les Makefiles pour construire kdelibs/ dans kdelibs-build/.

Windows

Vous devez lancer CMake pour générer les ficheirs de build pour votre système. Les builds in-source et out-of-source sont supportés par CMake, mais actuellement, les builds in-sources sont empêchés par l'implémentation de KDE.

En supposant que vous avez kdelibs\ dans c:\daten\kde4, utilisez ces commandes : So, let's say you have kdelibs\ in c:\daten\kde4, then do the following:

c:\daten\kde4> cd kdelibs\win
c:\daten\kde4> cmake
c:\daten\kde4> make 
c:\daten\kde4> make install
c:\daten\kde4> cd ..
c:\daten\kde4> mkdir kdelibs-build
c:\daten\kde4> cd kdelibs-build
c:\daten\kde4\kdelibs-build> cmake ..\kdelibs

Ceci générera les Makefiles pour construire kdelibs\ dans kdelibs-build\. Lisez la page KDE sous Windows pour plus d'informations sur la compilation de KDE sous Windows.

Fichies de projet KDevelop 3

Si vous préférez utiliser des fichiers de projet pour KDevelop 3 (qui sont simplement des Makefiles accompagnés de quelques données pour KDevelop), lancez-le de cette façon :

$ cmake ../kdelibs -GKDevelop3

Utilisez 'cmake -h' pour savoir quels générateurs CMake support ainsi que ses autres options.

CMake et Qt4

Pour trouver le réperoire de Qt4, CMake cherche qmake dans le répertoire d'exécution. CMake n'utilisez pas la variable d'environnement QTDIR. Assurez-vous d'abord que qmake se trouve dans le répertoire d'exécution qui vous utilisez.

Aller plus loin

Une fois que CMake a terminé, il va créer un fichier nommé "CMakeCache.txt". Ce fichier contient tous les paramètres que CMake a détecté sur votre système. si vous voulez lancer CMake avec un autre générateur ou que vous voulez que CMake refasse la détection, supprimez ce fichier.

Si CMake ne trouve pas quelque chose, mais que vous savez où il est, vous pouvez lui dire manuellement où ceci se trouve. CMake utilise des variables pour stocker ses informations. Ces variables sont situées dans le fichier mentionné ci-dessus : CMakeCache.txt. Il existe trois manières de configurer ces variables :

  • donner à CMake la valeur correcte via la ligne de commande : cmake ../kdelibs -DNOM_DE_LA_VARIABLE=valeur
  • utiliser ccmake, qui fourni un GUI basé sur curse pour éditer les variables CMake (lancez : ccmake ../kdelibs)
  • éditer directement le fichier CMakeCache.txt (déconseillé)

Vous pouvez lancer "ccmake ../kdelibs" au moins une fois, dans le but d'avoir une idée des variables que CMake utilise. Appuyez sur "T" pour voir également les variables "avancées".

Variables en ligne de commande

Quelques variables en ligne de commande de cmake que vous pouvez être amené(e) à modifier :

  • CMAKE_INSTALL_PREFIX: cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 qui est l'équivalent de ./configure --prefix=/opt/kde4
  • CMAKE_BUILD_TYPE: pour choisir le type de build que vous désirez. Vous pouvez choisir entre "debugfull", "Debug", "Profile", "RelWithDebInfo" et "Release". Le build par défaut est "RelWithDebInfo". Référez-vous à la page sur les types de builds de CMake pour plus d'informations.
  • KDE4_BUILD_TESTS=ON: créer des Makefile avec des programmes de test du build et fourni aussi des cibles 'test'.
  • KDE4_TEST_OUTPUT=xml: Tests utilisant la le framework QTestLib pour créer des fichiers de log en XML.
  • KDE4_DISABLE_MULTIMEDIA=ON: Construit KDE sans aucun support multimédia (audio et vidéo).
  • BUILD_foo=OFF: désactive les build pour le projet dans le répertoire 'foo'.
  • WITH_foo: il y a différentes options, par exemple WITH_CUPS ou WITH_Jasper. Si vous voulez les désactiver, cmake n'ira rien chercher dans ce paquet. Si ils sont activés, cmake tentera de les trouver. Si il n'y arrive pas, ajustez les variables comme décrit plus haut.

Vaiables d'environnement

Si vous avez des heades et des bibliothèques installés dans des chemins non-standards, que cmake ne peut trouver, modifiez les variables d'environnement suivantes. Elles peuvent être très utiles, par exemple si vous voulez installer kdesupport dans ~/install/kdesupport. Voci quelques conventions de nommage, qui ne marcherotn pas comme argument dans avec la command cmake :

  • CMAKE_INCLUDE_PATH, par exemple : CMAKE_INCLUDE_PATH=/sw/include
  • CMAKE_LIBRARY_PATH, par exemple : CMAKE_LIBRARY_PATH=/sw/lib
  • CMAKE_PROGRAM_PATH, par exemple : CMAKE_LIBRARY_PATH=/sw/bin

With CMake 2.6.0 and above the same effect can be achieved by setting just one variable:

  • CMAKE_PREFIX_PATH, eg. export CMAKE_PREFIX_PATH=/sw


Pour plus d'informations, vous pouvez consulter la page de ce wiki sur CMake

Aller plus loin

Si cmake finit avec "Generating done" et c'est qu'il n'y a eu aucune erreur, alors que si il finit avec "Configuring done" c'est qu'il y en a eu, et que vous devez les corriger. Une fois que cmake a fini de s'exécuter, lancez votre outil de build (par exemple make, KDevelop, XCode, ou MSVC), compilez-le, et attentez que ce soit fini. A ce moment, lancez "make install".

Si vous avez une erreur dans ce genre :

CMake Error: This project requires some variables to be set,
and cmake can not find them.
Please set the following variables:
X11_XTest_LIB (ADVANCED)

il se peut qu'il vous manque une bibliothèque (ou toute autre dépendance). Pour savoir laquelle, cherchez dans cmake/modules directory pour savoir quelle variable cmake n'arrive pas à trouver. Dans l'exemple précédent, il s'agit de

find_library(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})

Donc, la bibliothèque manquante est Xtst. Vous devez la trouver (peut-être en installant la bibliothèque libXtst-devel), et relancez cmake.

Utiliser CMake pour une petite application

Voici le plus simple CMakeLists.txt possible :

add_executable(hello main.cpp)

Il sert à créer un exécutable "hello" (ou "hello.exe" sous Windows") à partir du fichier source main.cpp. Vous pouvez mettre à la fois des fichiers C et C++ si besoin est. Vous pouvez également mettre différents exécutables et librairies dans CMakeList.txt. Le même fichier source peut être utilisé dans différents projets, et il sera compilé pour chacun des projets. La part la plus important du langage de CMake est les variables :

set( MY_SOURCES main.cpp widget.cpp)
message(STATUS "my sources: ${MY_SOURCES}")

Donc, utilisez la commande SET() pour définir la valeur d'une variable. Si vous mettez plus d'une chaîne de caractères, la variable sera une liste. Une liste est une liste de chaînes séparées par des virgules. Si vous voulez un seul élément, la variable n'aura que cet élément pour valeur. Pour avoir la valeur d'une variable, utilisez : ${NOM_DE_LA_VARIABLE}. Vous pouvez parcourir une liste en utilisant FOREACH() :

foreach(next_ITEM ${MY_SOURCES})
   message(STATUS "next item: ${next_ITEM}")
endforeach(next_ITEM ${MY_SOURCES})

Les commandes de CMake sont sensibles à la casse, de même que les noms de variables ou de paramètres.

Vous pouvez aussi tester divers choses :

if (UNIX)
   message(STATUS "This is UNIX (including OS X and CygWin)")
endif (UNIX)

if (MSVC)
   set(MY_SRCS ${MY_SRCS} winextra.cpp)
endif (MSVC)

Dans ce second exemple, on ajoute un élément dans une liste.

Dans le wiki de CMake, il y a également un tutoriel pour utiliser CMake dans la compilation de KDE4. Sa lecture est recommandée.

Utiliser CMake dans le cadre de KDE4

Voici un CMakeList.txt basique pour construire un petit projet KDE4 :

project( kde4project )
find_package( KDE4 REQUIRED )
include_directories( ${KDE4_INCLUDES} )

set( KDE4ProjectSources kde4mainapp.cpp someclass.cpp someotherclass.cpp )

kde4_add_executable( kde4project ${KDE4ProjectSources} )

target_link_libraries( kde4project ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} )

install( TARGETS kde4project  ${INSTALL_TARGETS_DEFAULT_ARGS} )

target_link_libraries contient les librairies de développement qui sont utilisées dans votre programme. Par exemple, si vous voulez utiliser libtidy-devel, le nom de fichier de la librairie est probablement /usr/local/lib/libtidy.a. Vous pouvez alors ajouter -ltidy à la commande d'appel de gcc. Dans ce cas, ajoutez tidy dans target_link_libraries. Si possible, utilisez les variables et macros prédéfinies, telles que ${KDE4_KDEUI_LIBS}.

install (TARGETS est l'endroit où les fichiers obtenus seront installés. Si vous n'avez pas cette ligne, make install ne sera pas possible.

Les variables, macros, et autres informations utiles spécifiques à KDE peuvent être trouvées sur la page des modules pour CMake.

Scripts pour CMake

CMake peut être étendu avec des scripts. CMake a par défaut un certain nombre de scripts ; sous Unix ils sont installés dans /usr/local/share/CMake/Modules/. Les librairies de KDE installent également des modules dans share/apps/cmake/modules/. Les fichiers s'y trouvant seront utilisé en priorité, devant ceux du dossier des modules globaux au système. Pour plus d'informations sur comment détecter les paquets qui se trouvent dans les fichiers FindFOO.cmake, cliquez ici. Vous pouvez également écrire des macros pour CMake. Elles sont puissantes et peuvent être requises pour construire certains logiciels, mais elles ne sont pas faites pour remplacer un langage de programmation.

Convertir des logiciels de KDE basés sur autotools vers CMake

Dans kdesdk/cmake/ vous pouvez trouver le script am2cmake. Il s'agit d'un script Ruby, il est donc requis que Ruby soit installé sur votre système. Lancez am2cmake dans le dossier principal de vos sources :

$ cd src/mykooltool/
$ am2cmake --kde4

N'oubliez pas l'option "--kde4", car sinon, les fichiers générés ne seront pas adaptés à un logiciel pour KDE. Les fichiers convertis son 'susceptibles' de fonctionner tels quels, mais les projets complexes requierent quelques modifications supplémentaires.

Il se peut que vous ayez à :

  • ajouter des répertoires d'include en utilisant INCLUDE_DIRECTORIES()
  • ajouter des bibliothèques de link en utilisant TARGET_LINK_LIBRARIES()
  • ajouter des switch de compilation en utilisant ADD_DEFINITIONS()
  • ajouter des vérification "configure" ; lisez comment effectuer des vérifications de la plateforme et comment trouver les logiciels déjà installés.
  • un fichier AdditionalInfo.txt est créé. Il vous permettra de voir tous les *.in et *.in.in de votre projet. Les noms de fichier dans ce fichier sont ceux qui doivent être convertis manuellement pour CMake.
  • take special care of former libtool convenience libraries. They are not supported by cmake, instead there will be a file ConvenienceLibs.cmake created. In this file you will find for every convenience lib a variable, which contains all source files of this convenience lib. For the targets which linked to this convenience lib, just add the variable to the sources.