Link SDL2_net 使用 CMake
Link SDL2_net with CMake
我正在尝试通过 CMake link SDL2_net (SDL_net 2.0) 到我的项目,但在四处搜索之后我还没有找到解决方案。我的 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".
我已经从我的包管理器(Fedora 29 上的 dnf)安装了 SDL2_net-devel 包,并且我已经成功 linked SDL2 和 SDL2_image 之前基于它this answer, which worked brilliantly. I also found this,但我不完全确定如何使用它。我该怎么办?
由于回答的人只发表了评论,所以我自己把它放在这里。
解决方案看起来很简单:我写了pkg_search_module (SDL_NET REQUIRED sdl2_net)
,而它应该是pkg_search_module (SDL_NET REQUIRED SDL2_net)
。
为了轻松集成SDL2库和其他相关库(SDL2_net、SDL2_mixer、...),我开发了modern cross-platform CMake modules,可以如下使用:
- 在我们的项目中克隆 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
我正在尝试通过 CMake link SDL2_net (SDL_net 2.0) 到我的项目,但在四处搜索之后我还没有找到解决方案。我的 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".
我已经从我的包管理器(Fedora 29 上的 dnf)安装了 SDL2_net-devel 包,并且我已经成功 linked SDL2 和 SDL2_image 之前基于它this answer, which worked brilliantly. I also found this,但我不完全确定如何使用它。我该怎么办?
由于回答的人只发表了评论,所以我自己把它放在这里。
解决方案看起来很简单:我写了pkg_search_module (SDL_NET REQUIRED sdl2_net)
,而它应该是pkg_search_module (SDL_NET REQUIRED SDL2_net)
。
为了轻松集成SDL2库和其他相关库(SDL2_net、SDL2_mixer、...),我开发了modern cross-platform CMake modules,可以如下使用:
- 在我们的项目中克隆 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