将CMAKE find_package与SDL2一起使用
Using CMAKE find_package with 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的书。谢谢大家!
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 与 SDL2(以及类似案例)一起构建SDL2_image
- 将 glew 与 SDL2 一起使用
- 是否可以将SDL2与智能指针一起使用
- 检查与SDL2一起播放音乐
- 我可以将SDL-1.2.15与SDL2-Image Extension一起使用
- 视觉C++ 将SDL_ttf与 SDL 和 SDL2 一起使用时出现访问冲突