繁体   English   中英

创建简单项目时,CMake无法在Windows中找到SFML目录

[英]CMake is unable to find SFML directories in Windows when creating a simple project

我最近下载了Windows版CMake,因为我想为SFML开发一个跨平台的插件,并决定按照此处的指南测试如何做。 按照指南,我在Documents目录中创建了一个名为sfml_test_cmake (Windows 10)的文件夹,其中包含CMakeLists.txtmain.cpp (具有SFML代码),以及一个文件夹cmake_modules ,其中将包含文件FindSFML.cmake CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.9)
project(SFML-CmakeTest)

set(EXECUTABLE_NAME "sfml_test_cmake")

add_executable(${EXECUTABLE_NAME} main.cpp)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2.4 REQUIRED system window graphics network audio)
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})

install(TARGETS ${EXECUTABLE_NAME} DESTINATION bin)

main.cpp (这是一个简单的测试程序)如下所示:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow testWindow{ sf::VideoMode{ 640, 480 }, "Test Window", sf::Style::Default };

    while (testWindow.isOpen())
    {
        sf::Event winEvent;
        while (testWindow.pollEvent(winEvent))
        {
            if (winEvent.type == sf::Event::Closed)
            {
                testWindow.close();
            }
        }
        testWindow.clear();
        testWindow.display();
    }
}

至于SFML的安装位置,它既安装在我的Documents目录中,又安装在我的C:\\驱动器中。 为了最终构建代码,我打开了cmd.exe ,在用于构建的文件夹内创建了一个新目录,然后运行cmake .. 我得到的错误是:

CMake Error at cmake_modules/FindSFML.cmake:357 (message):
  Could NOT find SFML (missing: SFML_SYSTEM_LIBRARY SFML_WINDOW_LIBRARY
  SFML_GRAPHICS_LIBRARY SFML_NETWORK_LIBRARY SFML_AUDIO_LIBRARY)

在查找FindSFML.cmake ,我发现了这一点:

# define the list of search paths for headers and libraries
set(FIND_SFML_PATHS
    ${SFML_ROOT}
    $ENV{SFML_ROOT}
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local
    /usr
    /sw
    /opt/local
    /opt/csw
    /opt)

这告诉我,如果我在Linux上,Cmake只会搜索SFML所在的目录,并解释为什么找不到目录。 为了解决此问题,我将功能更改为以下内容:

# define the list of search paths for headers and libraries
set(FIND_SFML_PATHS
    ${SFML_ROOT}
    $ENV{SFML_ROOT}
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local
    /usr
    /sw
    /opt/local
    /opt/csw
    /opt
    C:/)

但是,这次重建导致了同样的错误,这让我感到困惑。 我究竟做错了什么?

不要修改原始的FindSFML.cmake。 而是定义一个变量CMAKE_PREFIX_PATH ,该变量包含计算机上应安装SFML的路径。 在搜索路径列表中添加“ C:\\”将不起作用,cmake不会递归搜索指定路径中的所有目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM