Utiliser
if (WIN32)
#do something
endif (WIN32)
ou
if (UNIX)
#do something
endif (UNIX)
ou
if (MSVC)
#do something
endif (MSVC)
ou similaire
voir CMake Useful Variables et CMake Checking Platform
En général
Vous pouvez détecter et spécifier des variables pour plusieurs systèmes d'exploitation comme celui-ci :
Détecter Microsoft Windows
if(WIN32)
# for Windows operating system in general
endif()
Ou :
if(MSVC OR MSYS OR MINGW)
# for detecting Windows compilers
endif()
Détecter Apple MacOS
if(APPLE)
# for MacOS X or iOS, watchOS, tvOS (since 3.10.3)
endif()
Détecter Unix et Linux
if(UNIX AND NOT APPLE)
# for Linux, BSD, Solaris, Minix
endif()
Votre problème spécifique avec l'éditeur de liens
Pour résoudre votre problème avec le wsock32
spécifique à Windows bibliothèque, supprimez-la simplement des autres systèmes, comme ceci :
if(WIN32)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
else
target_link_libraries(${PROJECT_NAME} bioutils)
endif()
Vous avez des mots spéciaux de CMAKE, jetez un oeil :
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
// do something for Linux
else
// do something for other OS
Étant donné qu'il s'agit d'un problème si courant, geronto-posting :
if(UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()
# if(NOT LINUX) should work, too, if you need that
if(LINUX)
message(STATUS ">>> Linux")
# linux stuff here
else()
message(STATUS ">>> Not Linux")
# stuff that should happen not on Linux
endif()
CMake logique booléenne docs
CMake noms de plate-forme, etc.