首页 > 解决方案 > 将 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 有任何其他批评,我们将不胜感激!

标签: c++cmakesdl-2

解决方案


Tsyvarev 提供的答案

使用已安装的库(不是从源代码构建的)时,请使用 SD2_LIBRARIES 变量。

另一方面,我实际上在早些时候修复了这个问题,但是当我遇到与链接 CMAKE_DL_LIBS 相关的链接器错误时,我认为我做错了,我已经删除了它,因为我认为它没有做任何事情:/ 肯定会通读那个 CMake书。谢谢大家!


推荐阅读