Usar
if (WIN32)
#do something
endif (WIN32)
o
if (UNIX)
#do something
endif (UNIX)
o
if (MSVC)
#do something
endif (MSVC)
o similar
consulte CMake Useful Variables y CMake Checking Platform
En general
Puede detectar y especificar variables para varios sistemas operativos así:
Detectar Microsoft Windows
if(WIN32)
# for Windows operating system in general
endif()
O:
if(MSVC OR MSYS OR MINGW)
# for detecting Windows compilers
endif()
Detectar MacOS de Apple
if(APPLE)
# for MacOS X or iOS, watchOS, tvOS (since 3.10.3)
endif()
Detectar Unix y Linux
if(UNIX AND NOT APPLE)
# for Linux, BSD, Solaris, Minix
endif()
Tu problema específico con el enlazador
Para resolver su problema con el wsock32
específico de Windows biblioteca, simplemente elimínelo de otros sistemas, así:
if(WIN32)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
else
target_link_libraries(${PROJECT_NAME} bioutils)
endif()
Tienes algunas palabras especiales de CMAKE, echa un vistazo:
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
// do something for Linux
else
// do something for other OS
Dado que este es un problema tan común, 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 documentos de lógica booleana
CMake nombres de plataformas, etc.