On peut qualifier CMake (cross platform make) comme étant un équivalent à Autotools (GNU build system). Il est multiplate-forme.
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)