GNU/Linux >> Znalost Linux >  >> Linux

Pokyny specifické pro OS v CMAKE:Jak na to?

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.


Linux
  1. Jak zabít proces běžící na konkrétním portu v Linuxu?

  2. Jak gzipovat všechny nebo konkrétní soubory v Linuxu

  3. Jak zakázat konkrétní příkaz pro konkrétního uživatele v Linuxu

  1. Jak používat BusyBox na Linuxu

  2. Jak vyloučit konkrétní adresáře z kopírování v Linuxu

  3. linux - jak vypsat oddíly konkrétního typu?

  1. Jak extrahovat soubory Tar do konkrétního nebo jiného adresáře v Linuxu

  2. Jak vymazat konkrétní příkaz z historie Bash v Linuxu

  3. Jak nainstalovat balíčky z konkrétního úložiště v Linuxu