You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下CMake+Ninja构建项目报错:找不到GLFW/glfw3.h文件

解决Ninja构建时GLFW头文件找不到的问题

编译项目时遇到以下错误:

fatal error: GLFW/glfw3.h: No such file or directory

我的项目配置如下:

根目录CMakeLists.txt

cmake_minimum_required(VERSION 3.15...3.31)
project(LearnOpenGL VERSION 0.1.0 LANGUAGES C CXX)

find_package(OpenGL REQUIRED)

add_subdirectory(deps)
add_executable(LearnOpenGL src/main.cpp)

target_link_libraries(LearnOpenGL PRIVATE glfw glad)
set_target_properties(glfw PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(LearnOpenGL PRIVATE "src/")

GLFW目录下的CMakeLists.txt

add_library(glfw
    "include/glfw3.h"
    "include/glfw3native.h"
)

target_include_directories(glfw PUBLIC "include/")

项目文件结构

.
├── build/
├── deps/
│   ├── glad/
│   │   ├── include/
│   │   │   ├── glad/
│   │   │   │   └── glad.h
│   │   │   └── KHR/
│   │   │       └── khrplatform.h
│   │   ├── src/
│   │   │   └── glad.c
│   │   └── CMakeLists.txt
│   ├── GLFW/
│   │   ├── include/
│   │   │   ├── glfw3.h
│   │   │   └── glfw3native.h
│   │   └── CMakeLists.txt
│   └── CMakeLists.txt
├── src/
│   └── main.cpp
└── CMakeLists.txt

问题原因

自定义的GLFW CMake配置仅添加了头文件作为库的源文件,这完全错误——GLFW是需要编译的C库,仅包含头文件无法生成有效的库目标,也无法正确传递头文件路径到主项目。

解决方案

  1. 替换GLFW的CMake配置
    删掉当前deps/GLFW/CMakeLists.txt,从GLFW官方渠道拉取完整源码到deps/GLFW目录,官方源码自带完善的CMakeLists.txt,能自动处理平台编译依赖、头文件路径等问题。

  2. 确认deps目录的CMakeLists.txt
    确保deps/CMakeLists.txt包含以下内容,正确引入GLFW和glad子目录:

    add_subdirectory(GLFW)
    add_subdirectory(glad)
    
  3. 重新生成构建文件
    清理旧的build目录,重新运行CMake生成Ninja构建文件:

    rm -rf build
    mkdir build && cd build
    cmake -G Ninja ..
    ninja
    
  4. 验证头文件包含
    主项目代码中保持#include <GLFW/glfw3.h>的写法即可,因为GLFW官方CMake配置会将include目录设为PUBLIC,主项目通过target_link_libraries链接glfw时会自动继承该头文件路径。


内容的提问来源于stack exchange,提问作者skoleosho97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:07:25