【问题标题】:Using CMAKE find_package with SDL2将 CMAKE find_package 与 SDL2 一起使用
【发布时间】:2021-05-17 18:48:35
【问题描述】:

我有一个使用 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 有任何其他批评,我们将不胜感激!

【问题讨论】:

  • 使用find_package 提供提示 - 请参见此处的示例 - stackoverflow.com/a/64337995/1607937
  • GLOBbing 现在已被弃用,加上 3.8 现在是一个相当老的 min-vers。在开头附近还应该有一个project 声明。我建议购买 Craig Scott 的书“Professional CMake”-crascit.com
  • "cmake throws a package not found error" - 不,这是对 CMake 输出的错误解释。 find_package 调用已成功。问题在于 call 没有像预期的那样定义 SDL2::SDL2 目标。
  • @Den-Jason 要么我做错了,要么没有运气。 find_package(SDL2 REQUIRED HINTS /usr/lib/x86-64-linux-gnu/) 感谢本书的推荐!我去拿一份。
  • @Tsyvarev 所以它找到了包,但没有定义目标?这是怎么回事?调试输出当然没有包含任何关于无法找到包的信息。

标签: c++ cmake sdl-2


【解决方案1】:

Tsyvarev 提供的答案

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

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

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2014-10-03
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多