c++ - 将 CMAKE find_package 与 SDL2 一起使用
问题描述
我有一个使用 CMAKE 的项目,需要链接 SDL2。我试图了解 find_package 是如何工作的。在过去的某个时刻,我可以通过提供我自己的 FindSDL2.cmake 来让 find_package 工作,但是在一些新的链接器错误之后,我决定尝试不同的方法。我正在做的阅读似乎暗示,在我安装了 libsdl2-dev 包之后,我应该能够只使用 find_package(SDL2 REQUIRED) 然后 target_link_libraries(Suqua PRIVATE SDL2::SDL2),但是 cmake 会抛出一个找不到包错误。我需要提供自定义 FindSDL2.cmake 吗?
CMakeLists.txt
cmake_minimum_required (VERSION 3.8)
set(CMAKE_CXX_STANDARD 17)
find_package(SDL2 CONFIG REQUIRED)
file(GLOB source_files
"src/*.cpp"
"header/*.h"
)
add_library(Suqua ${source_files} "src/glad.c" )
target_include_directories(Suqua PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/header)
target_include_directories(Suqua PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include)
target_link_libraries(Suqua PRIVATE SDL2::SDL2 enet)
if(UNIX)
target_link_libraries(Suqua PRIVATE stdc++fs)
endif()
错误
CMake Error at Suqua/CMakeLists.txt:13 (add_library):
Target "Suqua" links to target "SDL2::SDL2" but the target was not found.
Perhaps a find_package() call is missing for an IMPORTED target, or an
ALIAS target is missing?
谢谢,如果您对我的 CMakeLists 有任何其他批评,我们将不胜感激!
解决方案
Tsyvarev 提供的答案
使用已安装的库(不是从源代码构建的)时,请使用 SD2_LIBRARIES 变量。
另一方面,我实际上在早些时候修复了这个问题,但是当我遇到与链接 CMAKE_DL_LIBS 相关的链接器错误时,我认为我做错了,我已经删除了它,因为我认为它没有做任何事情:/ 肯定会通读那个 CMake书。谢谢大家!
推荐阅读
- python - 从两个离散函数中获得最大值的最短 Python 代码是什么?
- visual-studio - 无法更新工作项 - 原因:TF237124:工作项尚未准备好保存
- json - JSON API 资源是否可以具有作为关系简写的属性?
- django - 无法找到 403 Forbidden 错误的原因:Nginx Daphne Django
- bluetooth - 有没有办法在不查看规格表的情况下找到蓝牙版本?
- javascript - Firebase auth() 子函数无法识别
- c++ - 在代码块中使用图形但没有输出
- javascript - foreach 中的 if /else 条件
- matlab - Matlab table - 在表中搜索和隔离值
- javascript - 反应-输入字段在onChange后变为字符串