【问题标题】:CMake can not find SFML libCMake 找不到 SFML 库
【发布时间】:2022-09-27 15:55:01
【问题描述】:

我有一个项目依赖于 C++ 上的 SFML lib。我试图用 CMake 做到这一点。 CMakeLists.txt 是:

cmake_minimum_required(VERSION 3.16.3)
project(3D_Renderer_from_scratch)

set(CMAKE_CXX_STANDARD 17)

include_directories(headers source)

set(SFML_STATIC_LIBRARIES TRUE)

find_package(SFML COMPONENTS window graphics system)

set(SOURCES
        Main.cpp
        source/Application.cpp
        source/Box.cpp
        source/Camera.cpp
        source/FileReader.cpp
        source/KeyboardHandler.cpp
        source/Sphere.cpp
        source/Triangle.cpp
        source/Window.cpp
        source/World.cpp
        )

add_executable(executable ${SOURCES})

target_link_libraries(executable ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})

运行cmake . 后出现以下错误:

$ cmake .
-- Requested SFML configuration (Static) was not found
CMake Warning at CMakeLists.txt:10 (find_package):
  Found package configuration file:

    /usr/lib/x86_64-linux-gnu/cmake/SFML/SFMLConfig.cmake

  but it set SFML_FOUND to FALSE so package \"SFML\" is considered to be NOT
  FOUND.


-- Configuring done
-- Generating done
-- Build files have been written to: /home/mcjohn974/3D_Renderer_from_scratch

我该如何解决? (已安装 sfml 库)

  • \"未找到请求的 SFML 配置(静态)\" - 您的 SFML 安装似乎只包含共享图书馆和没有静止的那些。请注意,标准 SFML 包(如 one on Ubuntu)仅提供共享库。
  • @Tsyvarev 非常感谢,您能帮我如何通过 CMake 链接共享库吗?
  • target_link_libraries 适用于共享库和静态库。只需从您的代码中删除行 set(SFML_STATIC_LIBRARIES TRUE),这样您的项目就可以使用实际安装的共享 SFML 库。

标签: c++ cmake sfml


【解决方案1】:

正如 cmets 中已经提到的(为什么不把它写成答案?),CMake 正在寻找静态 SFML 库,它很可能只是找到了共享库。

要么确保提供了静态库(带有 -s 后缀的库)。
或者不请求静态库,不设置SFML_STATIC_LIBRARIES即可实现。

【讨论】:

    猜你喜欢
    • 2015-10-19
    • 2016-10-12
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2011-12-26
    • 2013-04-21
    相关资源
    最近更新 更多