Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake的GLFW生成错误:“0”;以下配置文件已被考虑但未被接受;_Cmake_Glfw - Fatal编程技术网

CMake的GLFW生成错误:“0”;以下配置文件已被考虑但未被接受;

CMake的GLFW生成错误:“0”;以下配置文件已被考虑但未被接受;,cmake,glfw,Cmake,Glfw,我一直在尝试设置GLFW来启动OpenGL项目,但是一个错误不断出现,无论我怎么尝试,我都无法解决。错误消息的重要部分如下所示: CMake Error at CMakeLists.txt:12 (find_package): Could not find a configuration file for package "glfw3" that is compatible with requested version "3.3.2". The

我一直在尝试设置GLFW来启动OpenGL项目,但是一个错误不断出现,无论我怎么尝试,我都无法解决。错误消息的重要部分如下所示:

CMake Error at CMakeLists.txt:12 (find_package):
  Could not find a configuration file for package "glfw3" that is compatible
  with requested version "3.3.2".

The following configuration files were considered but not accepted:

    C:/Users/../GLFW/lib/cmake/glfw3/glfw3Config.cmake, version: 3.3.2 (32bit)
我的CMakeLists.txt如下所示:

set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Dependencies/GLFW/lib/cmake/glfw3")

add_executable(1_Intro main.cpp)

include_directories(Dependencies/GLFW/include/GLFW/)

find_package(glfw3 3.3.2 CONFIG REQUIRED)
target_link_libraries(1_Intro ${GLFW})
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/GLFW")
endif()
cmake_minimum_required(VERSION 3.17)
project(PROJECT_NAME)

set(CMAKE_CXX_STANDARD 17)

add_executable(PROJECT_NAME main.cpp)
所有必要的GLFW文件都可以在我的项目文件夹中找到,如下所示:

GLFW
|- include
|   |- GLFW
|       | - glfw3.h
|       | - glfw3native.h
|- lib
    |- cmake
        |- glfw3
            |- glfw3Config.cmake
            |- glfw3ConfigVersion.cmake
            |- glfw3Targets.cmake
            |- glfw3Targets-noconfig.cmake
    |- pkgconfig
        |- glfw3.pc
    |- libglfw3.a
我所做的构建库的工作是下载源代码,然后像使用MinGW-w64 GCC编译器一样使用
cmake-G“MinGW makefile”
,然后使用
mingw32 make
mingw32 make安装。然后我将构建文件复制到如上所示的文件夹中

在寻找解决方案后,我发现问题可能来自库和编译器(和)使用的构建体系结构的差异。我使用MinGW-w64编译器,并且更愿意使用它,所以我尝试更改CMake构建。但是,我遇到了另一个问题,即我无法使用
-DCMAKE\u GENERATOR\u platform
等选项更改“MinGW makefile”的平台规范。我试图改变工具链,但也没有成功;唯一的解决方案似乎是使用VisualStudio64位工具链,但这不是我想要的


有没有办法改变我的CMake构建,使其成为x64体系结构?或者将我的编译器设置为x86(如果有意义的话)以匹配“glfw3Config.cmake”版本?我对其他解决方案持开放态度,只要我能保持我的项目结构和编译器的原样。

因此我找到了问题所在。我在我的计算机上有和,以及路径中的
bin
目录路径。例如,当运行
where gcc
时,会显示后一个
bin
路径,但不会显示前一个路径。所以我从PATH中删除了MinGW的路径,重新启动计算机,按照前面的解释重新构建和编译,现在它可以工作了

不过,我这样做是为了解释我安装GLFW所采取的步骤,这有点像一场噩梦,在上述问题之前我遇到了很多问题。我在GCC 8.1.0中使用了Windows 10、CMake 3.17.2、MinGW-w64,但在其他编译器和体系结构中也使用了同样的方法,但需要做一些必要的更改:

  • 从下载源代码。在撰写本文时,版本为3.3.2

  • 建立图书馆

  • 首先,解压缩源代码并在其中创建一个
    build
    文件夹(尽管您可以在源文件夹之外创建它,但没有区别),然后运行
    cmake-G“MinGW Makefiles”-S-B build
    (我建议在gcc
  • 之前运行
    以检查gcc路径是否指向MinGW-w64的
    bin
    ;请参阅)

  • build
    文件夹中运行命令
    mingw32 make
    。这将花费一点时间,因为它将创建所有目标,不仅是库本身,还有文档和示例。如果您不想这样做,可以返回到步骤2.1并使用选项运行CMake命令(一个更简单的选项是只使用CMake GUI,在这里您可以相当轻松地打开和关闭这些选项)。我想感谢的作者,他对构建过程的精确描述(以及他在Windows上和我一样使用CMake安装GLFW的事实)对我帮助很大

  • 您应该有一个cmake_install.cmake文件。打开它:您应该在前几行看到如下内容:

    set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Dependencies/GLFW/lib/cmake/glfw3")
    
    add_executable(1_Intro main.cpp)
    
    include_directories(Dependencies/GLFW/include/GLFW/)
    
    find_package(glfw3 3.3.2 CONFIG REQUIRED)
    target_link_libraries(1_Intro ${GLFW})
    
    # Set the install prefix
    if(NOT DEFINED CMAKE_INSTALL_PREFIX)
      set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/GLFW")
    endif()
    
    cmake_minimum_required(VERSION 3.17)
    project(PROJECT_NAME)
    
    set(CMAKE_CXX_STANDARD 17)
    
    add_executable(PROJECT_NAME main.cpp)
    
    这是默认的CMAKE_安装_前缀路径。它告诉make程序在何处安装依赖项:将其更改为所需的文件夹,但请记住它不会被创建,它必须已经存在(并且不要忘记将反斜杠
    \
    更改为斜杠
    /
    )。现在运行
    mingw32 make install
    。您应该在您提供的文件夹中看到一个
    包含
    文件夹

  • 编辑CMakeLists.txt

  • 现在您已经构建了库,您需要编辑CMakeLists.txt文件,以便将GLFW链接到您的CMake项目。典型的未修改的CMakeLists.txt文件如下所示:

    set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Dependencies/GLFW/lib/cmake/glfw3")
    
    add_executable(1_Intro main.cpp)
    
    include_directories(Dependencies/GLFW/include/GLFW/)
    
    find_package(glfw3 3.3.2 CONFIG REQUIRED)
    target_link_libraries(1_Intro ${GLFW})
    
    # Set the install prefix
    if(NOT DEFINED CMAKE_INSTALL_PREFIX)
      set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/GLFW")
    endif()
    
    cmake_minimum_required(VERSION 3.17)
    project(PROJECT_NAME)
    
    set(CMAKE_CXX_STANDARD 17)
    
    add_executable(PROJECT_NAME main.cpp)
    
    您需要链接的是首先设置CMAKE_PREFIX_PATH变量。在我的例子中,我在
    add\u executable(..)
    之前添加了这一行:

    这是因为我想在我的项目文件夹中有GLFW依赖项。但是,如果您也放置了一个绝对路径,它应该可以正常工作:重要的是该文件夹包含glfw3Config.cmake和glfw3Targets.cmake文件(如果您正确构建了库,您应该在
    build\u folder/lib/cmake/glfw3/
    下找到它们)

    既然您已经告诉CMake在哪里查找glfw3Config.CMake文件,那么您需要将库链接到项目。您可以通过在
    add\u executable(..)
    命令之后添加:

    find_package(glfw3 REQUIRED)
    target_link_libraries(PROJECT_NAME glfw)
    
    如果这给了你一个错误,比如

    By not providing "Findglfw3.cmake" in CMAKE_MODULE_PATH this project 
    has asked CMake to find a package configuration file provided by "glfw3", but
    CMake did not find one.
    
    Could not find a package configuration file provided by "glfw3" (requested
    version 3.2) with any of the following names:
    
    glfw3Config.cmake
    glfw3-config.cmake
    
    Add the installation prefix of "glfw3" to CMAKE_PREFIX_PATH or set
    "glfw3_DIR" to a directory containing one of the above files.  If "glfw3"
    provides a separate development package or SDK, be sure it has been installed.
    
    glfw3
    REQUIRED
    之间添加
    CONFIG
    (有关详细信息,请参阅)

  • 您需要做的最后一件事是添加行
    include\u目录(Dependencies/GLFW/include/GLFW/)
    ,并在GLFW build文件夹中添加
    include
    。CMakeLists.txt现在应该是这样的:

    cmake_minimum_required(VERSION 3.17)
    project(PROJECT_NAME)
    
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Dependencies/GLFW/lib/cmake/glfw3")
    
    add_executable(PROJECT_NAME main.cpp)
    
    include_directories(Dependencies/GLFW/include/GLFW/)
    
    find_package(glfw3 REQUIRED)
    target_link_libraries(PROJECT_NAME glfw)
    
    如果您在这里没有出错,恭喜您。您已成功地将GLFW链接到您的CMake项目现在,让您的项目启动并运行,并能够编写一些基本的OpenGL代码的最后一件事是:将
    find_package
    部分更改为:

    find_package(OpenGL REQUIRED)
    find_package(glfw3 REQUIRED)
    target_link_libraries(PROJECT_NAME opengl32 glfw)
    
    正如您所想,这将把OpenGL链接到该项目。不需要做更多的事情,因为OpenGL DLL(opengl32.DLL和glu32.DLL)应该已经在
    C:\Windows\System32
    中了

  • 我希望这个答案将有助于人们安装GLFW而不必担心