【问题标题】:SFML library-NOTFOUND error during MinGW buildMinGW 构建期间的 SFML 库-NOTFOUND 错误
【发布时间】:2020-10-08 21:15:21
【问题描述】:

我正在尝试通过以下方式构建一个测试 SFML 程序:

Windows 10、CLion、MinGW64、CMake、SFML-2.5.1

CmakeList.txt

cmake_minimum_required(VERSION 3.14)
project(Test_sfml_cmake_)

set(CMAKE_CXX_STANDARD 17)
cmake_minimum_required(VERSION 3.0)

set(SFML_DIR "SFML-2.5.1/lib/cmake/SFML")

find_package(SFML 2.5 COMPONENTS graphics audio REQUIRED)
add_executable(SFMLTest main.cpp)
target_link_libraries(SFMLTest sfml-graphics sfml-audio)

MinGW 构建失败并出现错误(完整输出):

-- Found SFML 2.5.1 in D:/_Documents/Cpp Projects/Test_sfml[cmake]/SFML-2.5.1/lib/cmake/SFML
-- Configuring done
-- Generating done
-- Build files have been written to: D:/_Documents/Cpp Projects/Test_sfml[cmake]/cmake-build-debug
Scanning dependencies of target SFMLTest
mingw32-make.exe[2]: *** No rule to make target 'sfml-audio-NOTFOUND', needed by 'SFMLTest.exe'.  Stop.
mingw32-make.exe[2]: *** Waiting for unfinished jobs....
[ 50%] Building CXX object CMakeFiles/SFMLTest.dir/main.cpp.obj
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:72: CMakeFiles/SFMLTest.dir/all] Error 2
mingw32-make.exe: *** [Makefile:83: all] Error 2

有谁知道问题出在哪里?

【问题讨论】:

  • 您是否尝试使用find_package(SFML ...) 调用提供的SFML_* 变量,如响应here 中所示?
  • 那里使用的是旧版本的 SFML,因此不适用于这种情况
  • 好吧,你是对的; sfml-graphics 语法应该适用于最新的 SFML。您能否提供您的完整 CMake 输出? sfml-* 目标设置为 -NOTFOUND 的事实让我认为在此过程的早期可能出现了问题。您的 CMake 输出可能会显示这一点。
  • 更新问题

标签: c++ cmake mingw sfml


【解决方案1】:

您的 SFML 库的完整路径包含括号 [ ]:

"D:/_Documents/Cpp Projects/Test_sfml[cmake]/SFML-2.5.1"

这是 CMake 的一个问题(请参阅 this question),因为方括号是用于表示 bracket arguments 和引号的特殊字符。

在这种情况下,在路径中使用方括号会导致奇怪的行为,因为 find_package 调用似乎成功,但您的 sfml-* 目标未正确创建(例如 sfml-audio-NOTFOUND)。

因此,只需将项目的目录名称更改为删除方括号,重新运行 CMake,然后重新构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2020-09-08
    • 2011-08-02
    • 2013-06-07
    • 2020-10-06
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多