Použijte
if (WIN32)
#do something
endif (WIN32)
nebo
if (UNIX)
#do something
endif (UNIX)
nebo
if (MSVC)
#do something
endif (MSVC)
nebo podobné
viz užitečné proměnné CMake a kontrolní platforma CMake
Obecně
Můžete detekovat a specifikovat proměnné pro několik operačních systémů, jako je tento:
Zjistit Microsoft Windows
if(WIN32)
# for Windows operating system in general
endif()
Nebo:
if(MSVC OR MSYS OR MINGW)
# for detecting Windows compilers
endif()
Zjistit Apple MacOS
if(APPLE)
# for MacOS X or iOS, watchOS, tvOS (since 3.10.3)
endif()
Zjistit Unix a Linux
if(UNIX AND NOT APPLE)
# for Linux, BSD, Solaris, Minix
endif()
Váš konkrétní problém s linkerem
Chcete-li vyřešit váš problém s wsock32
specifickým pro Windows knihovny, stačí ji odebrat z jiných systémů, jako je tento:
if(WIN32)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
else
target_link_libraries(${PROJECT_NAME} bioutils)
endif()
Máte nějaká speciální slova z CMAKE, podívejte se:
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
// do something for Linux
else
// do something for other OS
Vzhledem k tomu, že se jedná o tak běžný problém, 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 názvy platforem atd.
jak se připojit k serveru SQL pomocí SQuirreL SQL z krabice Linux bez registrace domény?
Rekurzivní počítání souborů v adresáři Linuxu