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库,仅包含头文件无法生成有效的库目标,也无法正确传递头文件路径到主项目。
解决方案
替换GLFW的CMake配置
删掉当前deps/GLFW/CMakeLists.txt,从GLFW官方渠道拉取完整源码到deps/GLFW目录,官方源码自带完善的CMakeLists.txt,能自动处理平台编译依赖、头文件路径等问题。确认deps目录的CMakeLists.txt
确保deps/CMakeLists.txt包含以下内容,正确引入GLFW和glad子目录:add_subdirectory(GLFW) add_subdirectory(glad)重新生成构建文件
清理旧的build目录,重新运行CMake生成Ninja构建文件:rm -rf build mkdir build && cd build cmake -G Ninja .. ninja验证头文件包含
主项目代码中保持#include <GLFW/glfw3.h>的写法即可,因为GLFW官方CMake配置会将include目录设为PUBLIC,主项目通过target_link_libraries链接glfw时会自动继承该头文件路径。
内容的提问来源于stack exchange,提问作者skoleosho97
相关产品推荐
相关产品推荐

