CMake

On peut qualifier 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)