Usa
if (WIN32)
#do something
endif (WIN32)
o
if (UNIX)
#do something
endif (UNIX)
o
if (MSVC)
#do something
endif (MSVC)
o simile
vedi Variabili utili di CMake e Piattaforma di controllo di CMake
In generale
Puoi rilevare e specificare variabili per diversi sistemi operativi come questo:
Rileva Microsoft Windows
if(WIN32)
# for Windows operating system in general
endif()
Oppure:
if(MSVC OR MSYS OR MINGW)
# for detecting Windows compilers
endif()
Rileva Apple MacOS
if(APPLE)
# for MacOS X or iOS, watchOS, tvOS (since 3.10.3)
endif()
Rileva Unix e Linux
if(UNIX AND NOT APPLE)
# for Linux, BSD, Solaris, Minix
endif()
Il tuo problema specifico con il linker
Per risolvere il tuo problema con wsock32
specifico per Windows library, basta rimuoverlo da altri sistemi, in questo modo:
if(WIN32)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
else
target_link_libraries(${PROJECT_NAME} bioutils)
endif()
Hai alcune parole speciali da CMAKE, dai un'occhiata:
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
// do something for Linux
else
// do something for other OS
Dato che si tratta di un problema così comune, 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 documenti di logica booleana
CMake nomi di piattaforme, ecc.