OS specific instructions in CMAKE: How to?
Use
if (WIN32)
#do something
endif (WIN32)
or
if (UNIX)
#do something
endif (UNIX)
or
if (MSVC)
#do something
endif (MSVC)
or similar
see CMake Useful Variables and CMake Checking Platform
In General
You can detect and specify variables for several operating systems like that:
Detect Microsoft Windows
if(WIN32)
# for Windows operating system in general
endif()
Or:
if(MSVC OR MSYS OR MINGW)
# for detecting Windows compilers
endif()
Detect Apple MacOS
if(APPLE)
# for MacOS X or iOS, watchOS, tvOS (since 3.10.3)
endif()
Detect Unix and Linux
if(UNIX AND NOT APPLE)
# for Linux, BSD, Solaris, Minix
endif()
Your specific linker issue
To solve your issue with the Windows-specific wsock32
library, just remove it from other systems, like that:
if(WIN32)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
else
target_link_libraries(${PROJECT_NAME} bioutils)
endif()
You have some special words from CMAKE, take a look:
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
// do something for Linux
else
// do something for other OS
Given this is such a common issue, 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 boolean logic docs
CMake platform names, etc.