Verwenden Sie
if (WIN32)
#do something
endif (WIN32)
oder
if (UNIX)
#do something
endif (UNIX)
oder
if (MSVC)
#do something
endif (MSVC)
oder ähnlich
siehe Nützliche CMake-Variablen und CMake-Prüfplattform
Allgemein
Sie können Variablen für mehrere Betriebssysteme wie folgt erkennen und spezifizieren:
Microsoft Windows erkennen
if(WIN32)
# for Windows operating system in general
endif()
Oder:
if(MSVC OR MSYS OR MINGW)
# for detecting Windows compilers
endif()
Apple MacOS erkennen
if(APPLE)
# for MacOS X or iOS, watchOS, tvOS (since 3.10.3)
endif()
Unix und Linux erkennen
if(UNIX AND NOT APPLE)
# for Linux, BSD, Solaris, Minix
endif()
Ihr spezifisches Linker-Problem
Um Ihr Problem mit dem Windows-spezifischen wsock32
zu lösen Bibliothek, entfernen Sie sie einfach von anderen Systemen, so:
if(WIN32)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
else
target_link_libraries(${PROJECT_NAME} bioutils)
endif()
Sie haben einige spezielle Wörter von CMAKE, werfen Sie einen Blick darauf:
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
// do something for Linux
else
// do something for other OS
Da dies ein so häufiges Problem ist, 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 boolesche Logikdokumentation
CMake-Plattformnamen usw.