====== 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)