Ссылка SDL2_net с CMake - PullRequest
       36

Ссылка SDL2_net с CMake

0 голосов
/ 25 февраля 2019

Я пытаюсь связать SDL2_net (SDL_net 2.0) с моим проектом через CMake, но после поиска я все еще не нашел решения.Мой CMakeLists.txt в настоящее время выглядит следующим образом:

1 cmake_minimum_required (VERSION 3.7)
2 project (SDL_net_test)
3 include (FindPkgConfig)
4 include (FindSDL_net)
5 
6 pkg_search_module (SDL2 REQUIRED sdl2)
7 pkg_search_module (SDL_NET REQUIRED sdl2_net)
8 
9 include_directories (${SDL2_INCLUDE_DIRS} ${SDL_NET_INCLUDE_DIRS})
10 
11 add_executable (SDL_net_test main.cpp)
12 target_link_libraries (SDL_net_test ${SDL2_LIBRARIES} ${SDL_NET_LIBRARIES})

Однако, когда я пытаюсь запустить CMake, он выдает следующие ошибки:

-- Could NOT find SDL_net (missing: SDL_NET_LIBRARIES SDL_NET_INCLUDE_DIRS) 
-- Checking for one of the modules 'sdl2_net'
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:659 (message):
None of the required 'sdl2_net' found
Call Stack (most recent call first):
CMakeLists.txt:7 (pkg_search_module)


CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
SDL_NET_INCLUDE_DIR (ADVANCED)
   used as include directory in directory /home/neboula/Programming/sandbox/sdl2_net
   used as include directory in directory /home/neboula/Programming/sandbox/sdl2_net
   used as include directory in directory /home/neboula/Programming/sandbox/sdl2_net
SDL_NET_LIBRARY (ADVANCED)
    linked by target "SDL_net_test" in directory /home/neboula/Programming/sandbox/sdl2_net

-- Configuring incomplete, errors occurred!
See also "/home/neboula/Programming/sandbox/sdl2_net/build/CMakeFiles/CMakeOutput.log".

Я установил SDL2_net-devel пакет из моего менеджера пакетов (dnf на Fedora 29), и я успешно связал SDL2 и SDL2_image, ранее основывая его на этот ответ , который работал блестяще.Я также нашел это , но я не совсем уверен, как его использовать.Как мне поступить об этом?

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Чтобы легко интегрировать библиотеку SDL2 и другие связанные библиотеки (SDL2_net, SDL2_mixer, ...), я разработал современные кроссплатформенные модули CMake , которые можно использовать следующим образом:

  1. Модули Clone SDL2 CMake внутри нашего проекта:
git clone https://github.com/aminosbh/sdl2-cmake-modules cmake/sdl2
Добавьте следующие строки в свой основной CMakeLists.txt
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sdl2)
find_package(SDL2 REQUIRED)
find_package(SDL2_net REQUIRED)
target_link_libraries(${PROJECT_NAME} SDL2::Main SDL2:Net)

Вы даже можете указать собственный путь для поиска SDL2, SDL2_net, ... особенно полезного в Windows.

cmake .. -DSDL2_PATH="/path/to/sdl2" -DSDL2_NET_PATH="/path/to/sdl2-net"

Конечно, вы не должны забывать устанавливать определенные пакеты:

# Fedora/RPM
sudo yum install SDL2-devel SDL2_net-devel

# Debian/Ubuntu
sudo apt install libsdl2-dev libsdl2-net-dev
0 голосов
/ 02 марта 2019

Поскольку человек, предоставивший ответ, только оставил комментарий об этом, я сам его здесь опущу.

Казалось бы, решение было очень простым: я написал pkg_search_module (SDL_NET REQUIRED sdl2_net), хотя предполагалось, что оно будет pkg_search_module (SDL_NET REQUIRED SDL2_net).

...