====== CMake ======
On peut qualifier [[http://www.cmake.org/|CMake]] (//cross platform make//) comme étant un équivalent à **Autotools** (//GNU build system//). Il est multiplate-forme.
===== Détecter un système d'exploitation =====
Il existe pour cela une variable prédéfinie ''CMAKE_SYSTEM_NAME''.
Par exemple pour définir une nouvelle variable ''BSD_OS'', voici ce qu'il faut écrire dans son fichier ''CMakeLists.txt'' ou tout autre fichier se trouvant dans le dossier ''cmake/''.
string(FIND ${CMAKE_SYSTEM_NAME} "BSD" start)
if (${start} GREATER 0)
string(SUBSTRING ${CMAKE_SYSTEM_NAME} ${start} 3 BSD)
set(BSD_OS 1)
unset(BSD)
endif ()
Une explication s'impose, on recherche tout d'abord la chaîne de caractères BSD dans la valeur de la variable ''CMAKE_SYSTEM_NAME'', et on stocke l'indice dans une variable temporaire ''start''.
Si le résultat est supérieur à 0, on est donc en présence d'un système BSD (FreeBSD, NetBSD ou OpenBSD). Sur un système Linux ou Windows la valeur de ''start'' est -1.
Or il nous manque la prise en compte du système DragonFlyBSD, il faut que l'on rajoute un nouveau test.
string(FIND ${CMAKE_SYSTEM_NAME} "BSD" start)
if (${start} GREATER 0)
string(SUBSTRING ${CMAKE_SYSTEM_NAME} ${start} 3 BSD)
endif ()
if (${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
set(DFLY 1)
endif ()
if (DFLY OR BSD)
set(BSD_OS 1)
unset(BSD)
unset(DFLY)
endif ()
Si l'on souhaite créer une variable globale, il faut rajouter ceci à la commande ''set()''.
set(BSD_OS 1 CACHE INTERNAL BOOL FORCE)