Сделайте ссылку 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, и я действительно не знаю, как это исправить. Любые подсказки относительно того, как я могу все связать и в конечном итоге правильно скомпилировать?