【发布时间】: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 库。