11 Générer un fichier

CMake permet aussi de générer des fichiers pendant la précompilation.

Pour ce faire il faut utiliser la commande :

1
configure_file( )

Plus précisément :

1
configure_file(config.h.cmake config.h)

Où :

  • config.h.cmake est ce que l'on appelle le fichier squelette, c'est le fichier qui permettra de générer le fichier config.h
  • config.h le fichier qui va être générer par CMake à l'aide du fichier config.h.cmake

Faisons un exemple.

Voici le fichier config.h.cmake

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// File        : config.h
// Description : Configuration of @PROJECT_NAME@
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

#ifndef CONFIG_H
#define CONFIG_H

//---------------------------------------------------------------------------
// Name : SIMPLE_VERSION
// Usage: Version of @PROJECT_NAME@
//----------------------------------------------------------------------------
#define SIMPLE_VERSION "@SIMPLE_VERSION@"

#endif // CONFIG_H

Toutes la variables entre @ vont être remplacée par les valeurs des variables définies dans le CMakeLists.txt qui appellera CONFIGURE_FILE.

Si nous avons ce fichier CMakeLists.txt :

1
2
3
4
5
6
7
8
9
set(PROJECT_NAME EXEMPLE)

set(SIMPLE_MAJOR 1)
set(SIMPLE_MINOR 8)
set(SIMPLE_PATCH 6)
#on définit la version ${SIMPLE_VERSION} du projet
set(SIMPLE_VERSION ${SIMPLE_MAJOR}.${SIMPLE_MINOR}.${SIMPLE_PATCH})

configure_file(config.h.cmake config.h)

Nous obtiendrons ce fichier config.h :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// File        : config.h
// Description : Configuration of EXEMPLE
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

#ifndef CONFIG_H
#define CONFIG_H

//---------------------------------------------------------------------------
// Name : SIMPLE_VERSION
// Usage: Version of EXEMPLE
//----------------------------------------------------------------------------
#define SIMPLE_VERSION "1.8.6"

#endif // CONFIG_H

Bien sûr, vous n'êtes pas obligés de générer des fichier .h, vous pouvez générer n'importe quel fichier.