CMake和vcpkg中未找到GLFW目录

3

我一直无法弄清楚如何在使用VS2017的CMake时使CMake找到并设置正确的GLFW CMake常量。任何帮助将不胜感激 :).

我通过Microsoft的vcpkg工具下载了glfw3。我已经检查了vcpkg放置文件的目录(~\vcpkg\installed\x86-windows\include),确认文件确实存在于该目录中。我按照它们的文档在CMakeSettings.json中进行了设置,可以在这里找到。我以此教程为基础,正确设置GLFW。

然后我使用find_package(glfw3 REQUIRED)来查找glfw3库。这不会产生任何错误。实际上,CMakeLists.txt根本没有抱怨。问题出现在编译阶段。

之后,我使用target_link_libraries(exe ${GLFW3_LIBRARIES})将glfw3添加到可执行文件中。

然后,当我尝试构建一个简单的示例(包括头文件)时,编译失败,因为它找不到GLFW/glfw3.h。

来自MSVC的错误:

fatal error C1083: Cannot open include file: 'GLFW/glfw3.h': No such file or directory 

以下是我的CMakeLists.txt,仅供参考:

cmake_minimum_required(VERSION 3.7)
project(learn-opengl)
find_package(glfw3 REQUIRED)

add_executable(learn-opengl main.cpp)
target_link_libraries(learn-opengl ${GLFW3_LIBRARIES})

GLFW3_LIBRARIES是我从glfw3Config.cmake中获取的,通过查看vcpkg安装目录(~\vcpkg\installed\x86-windows\share\glfw3)的内容。

以防万一,这是main.cpp

#include <GLFW/glfw3.h>

int main()
{
    return 0;
}

我也尝试从命令行调用cmake,但是没有用,也不起作用。

我是否漏掉了什么?我可能误解了vcpkg文档中的某些内容吗?我真的不知道我漏掉了什么... :/ 另外,我应该说,我对CMake也相当新手。


1
你能否将导入的目标glfwglfw3添加到你的target_link_libraries命令中,而不是${GLFW3_LIBRARIES}?这样应该可以解决你看到的错误。 - vre
@vre 哇!glfw 终于成功了 :D!您能否把您的评论发布为答案,这样我就可以关闭问题了吗?非常感谢!如此简单... - segmentation_fault
2个回答

7

将我之前的评论改写为答案:

你应该将导入的目标glfw添加到你的target_link_libraries命令中,而不是${GLFW3_LIBRARIES}find_package(glfw3)会生成一个导入目标glfw。通过使你的目标learn-opengl依赖于这个导入目标,你可以指定要链接的库和要使用的包含目录。


0
你可以在你的vcpkg目录中使用命令.\vcpkg integrate project,它会给你一些安装vcpkg与nuget的指示,请按照这些指示进行操作,然后你只需在你的cpp文件中添加#include <GLFW/glfw3.h>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接