Сделайте ссылку CPM с помощью GameNetworkingSockets

Я пытаюсь связать Valves GameNetworkingSockets с моим проектом C++ cmake, и у меня возникают ошибки (сначала не удалось скомпилировать из-за отсутствия определений, когда я смог включить заголовки, более поздние ошибки были связаны с нераспознанными целями...). Я использую модуль CPM для установки пакетов. Ниже мой cmake:

      # Basic settings

cmake_minimum_required (VERSION 3.14)
project (Valhalla)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
include(get_cpm)

if (NOT CMAKE_BUILD_TYPE)
    SET(CMAKE_BUILD_TYPE Release)
endif()

############
# LIBRARIES
############



CPMAddPackage(
    NAME gamenetworkingsockets
    GITHUB_REPOSITORY ValveSoftware/GameNetworkingSockets
    #VERSION 3.11.3
    GIT_TAG v1.4.1
    DOWNLOAD_ONLY TRUE
    OPTIONS
    CONFIG REQUIRED
    "USE_STEAMWEBRTC ON"
    "Protobuf_USE_STATIC_LIBS ON"
)

##add_library(lua STATIC ${Lua_sources})
#add_library(steamnet STATIC ${gamenetworkingsockets_sources})
add_library(gamenetworkingsockets INTERFACE)
target_compile_definitions(gamenetworkingsockets INTERFACE STEAMNETWORKINGSOCKETS_STATIC_LINK)
target_include_directories(gamenetworkingsockets SYSTEM INTERFACE ${gamenetworkingsockets_SOURCE_DIR}/include)
#target_include_directories(gamenetworkingsockets PUBLIC ${gamenetworkingsockets_SOURCE_DIR}/include)
#target_include_directories(gamenetworkingsockets PUBLIC ${gamenetworkingsockets_BINARY_DIR})
#target_compile_definitions(gamenetworkingsockets PUBLIC STEAMNETWORKINGSOCKETS_STATIC_LINK)
#target_include_directories(gamenetworkingsockets SYSTEM INTERFACE ${gamenetworkingsockets_SOURCE_DIR}/include)
#target_include_directories(gamenetworkingsockets SYSTEM INTERFACE ${gamenetworkingsockets_BINARY_DIR}/include)

#target_include_directories(gamenetworkingsockets PRIVATE ${gamenetworkingsockets_INCLUDE_DIR})



#
# Linking
#

add_executable(Valhalla
    "src/Main.cpp"
)



target_include_directories(Valhalla PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

target_compile_features(Valhalla PRIVATE cxx_std_20)

target_link_libraries(Valhalla
    #gamenetworkingsockets
    #GameNetworkingSockets::shared
    #steamnet::steamnet_s
    #GameNetworkingSockets::GameNetworkingSockets_s
    #GameNetworkingSockets::static
    #GameNetworkingSockets::GameNetworkingSockets_s

)

set_target_properties(Valhalla PROPERTIES
    VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/run/
    CXX_EXTENSIONS OFF
    CXX_STANDARD_REQUIRED ON
)



if (MSVC)
    target_compile_options(Valhalla PRIVATE /bigobj "/diagnostics:caret")
endif()
if(MSVC AND CMAKE_BUILD_TYPE MATCHES Release)
    set_target_properties(Valhalla PROPERTIES WIN32_EXECUTABLE ON)
endif()

Вышеупомянутый Cmake был урезан до минимальной части для воспроизводимости. Как вы можете видеть, есть много закомментированных команд, так как я безрезультатно пытался найти способы заставить эту работу работать. Я обнаружил, что эта ссылка с библиотекой GameNetworkingSockets в Windows дает «неразрешенную внешнюю» ошибку , которая не помогает.

      #include <steam/steamnetworkingsockets.h>

int main(int argc, char **argv) {
    SteamNetworkingIdentity identity;
    
    identity.ParseString("str:peer-server");

    return 0;
}

Я понятия не имею, как связать vcpkg с Cmake из MSVC, и я действительно не знаю, как это исправить. Любые подсказки относительно того, как я могу все связать и в конечном итоге правильно скомпилировать?

0 ответов

Другие вопросы по тегам