CMake的GLFW生成错误:“0”;以下配置文件已被考虑但未被接受;
我一直在尝试设置GLFW来启动OpenGL项目,但是一个错误不断出现,无论我怎么尝试,我都无法解决。错误消息的重要部分如下所示: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
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而不必担心