CMake 无法找到 SDL2_ttf,我正在尝试以与 SDL2 相同的方式链接它,并且两者都正确安装在 Ubuntu 18.04 上

Posted

技术标签:

【中文标题】CMake 无法找到 SDL2_ttf,我正在尝试以与 SDL2 相同的方式链接它,并且两者都正确安装在 Ubuntu 18.04 上【英文标题】:CMake is unable to find SDL2_ttf, I'm trying to link it the same way I would with SDL2 and both are properly installed on Ubuntu 18.04 【发布时间】:2019-09-25 23:49:22 【问题描述】:

我得到错误:

CMake Error at CMakeLists.txt:11 (find_package):
  By not providing "FindSDL2_ttf.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "SDL2_ttf",
  but CMake did not find one.

  Could not find a package configuration file provided by "SDL2_ttf" with any
  of the following names:

    SDL2_ttfConfig.cmake
    sdl2_ttf-config.cmake

  Add the installation prefix of "SDL2_ttf" to CMAKE_PREFIX_PATH or set
  "SDL2_ttf_DIR" to a directory containing one of the above files.  If
  "SDL2_ttf" provides a separate development package or SDK, be sure it has
  been installed.

这是我的 cmake 文件的样子:

cmake_minimum_required(VERSION 3.14)
project(Smithereens)

set(CMAKE_CXX_STANDARD 17)

add_executable(Smithereens main.cpp)

find_package(SDL2 REQUIRED)
include_directories($SDL2_INCLUDE_DIRS)

find_package(SDL2_ttf REQUIRED)
include_directories($SDL2_ttf_INCLUDE_DIRS)

target_link_libraries(Smithereens $SDL2_LIBRARIES $SDL2_ttf_LIBRARIES)

SDL2 和 SDL2_ttf 都安装在我的机器上,我确定我只是链接不正确,学习 CMake 对我来说是一个巨大的头痛。

【问题讨论】:

它要求的文件是否存在于您的系统上? 我确定我只是链接不正确不,那部分是正确的。 find_package 是失败的原因。 我安装了 SDL2_ttf:sudo apt-get install libsdl2-ttf-dev 如果我从 SDL2_ttf 中删除 2,它将停止抛出错误。但是 TTF 函数都不起作用。 find_package(XXX) 仅在有FindXXX.cmake 脚本或XXXConfig.cmake (xxx-config.cmake) 之一时有效。有/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake 脚本,所以find_package(SDL2) 有效。但是SDL2_ttf没有这样的脚本,所以你不能使用find_package()来找到它。相反,它有/usr/lib/x86_64-linux-gnu/pkgconfig/SDL2_ttf.pc 脚本,因此可以使用pkg-config 找到它。有关在 CMake 中使用它的信息,请参阅 that question。 【参考方案1】:

这对我来说很好用,Ubuntu 18.04。

INCLUDE(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image>=2.0.0)
PKG_SEARCH_MODULE(SDL2TTF REQUIRED SDL2_ttf>=2.0.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(SOURCE_FILES main.cpp)

add_executable($PROJECT_NAME $SOURCE_FILES)

target_include_directories($PROJECT_NAME PRIVATE
    include $SDL2_INCLUDE_DIRS $SDL2IMAGE_INCLUDE_DIRS $SDL2TTF_INCLUDE_DIRS)

target_link_libraries($PROJECT_NAME PRIVATE
    $SDL2_LIBRARIES $SDL2IMAGE_LIBRARIES $SDL2TTF_LIBRARIES)

【讨论】:

以上是关于CMake 无法找到 SDL2_ttf,我正在尝试以与 SDL2 相同的方式链接它,并且两者都正确安装在 Ubuntu 18.04 上的主要内容,如果未能解决你的问题,请参考以下文章

Cmake 无法在 Homebrew 中找到 boost_pyhton 库

在Windows 10上的CLion / CMake中“无法找到SFML”错误?

即使已安装 CMake 也无法找到 gRPC 库(mac)

在 macOS 上使用 Ninja 进行 CMake GUI

CMake find_package 不适用于本征?

CMake 错误:CMake 无法找到与“Unix Makefiles”对应的构建程序。 CMAKE_MAKE_PROGRAM 未设置