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

添加Source子目录后CMake项目无法找到GLFW头文件的原因

问题:添加Source子目录后无法找到GLFW头文件

项目目录结构

Project
   Dependencies
      glfw
   Source
      CMakeLists.txt
      main.cpp
   CMakeLists.txt

初始可正常构建的根CMakeLists.txt配置

cmake_minimum_required(VERSION 3.8)

# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

project( Project )

# Include sub - projects.

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

set(MAIN "Source/main.cpp")

add_subdirectory("Dependencies/glfw")

add_executable( Project ${MAIN} )

target_link_libraries( Project glfw )

问题复现

在根CMakeLists.txt中添加add_subdirectory("Source")语句后,编译main.cpp时出现错误:无法找到GLFW/glfw3.h文件。

main.cpp代码:

#include <stdio.h>
#include <stdlib.h>

#include <GLFW/glfw3.h>

int main()
{
    //glewExperimental = true; // Needed for core profile
    if (!glfwInit())
    {
        fprintf(stderr, "Failed to initialize GLFW\n");
        return -1;
    }
}

Source目录下的CMakeLists.txt内容:

add_executable (CMakeTarget "Game Engine.cpp" )

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET CMakeTarget PROPERTY CXX_STANDARD 20)
endif()

错误原因分析

  1. 初始配置中,根目录的可执行目标Project直接包含main.cpp,并通过target_link_libraries(Project glfw)关联GLFW库。GLFW的CMake脚本会自动将自身的头文件目录通过INTERFACE_INCLUDE_DIRECTORIES属性传递给链接它的目标,因此编译Project时能正确找到GLFW的头文件。
  2. 添加add_subdirectory("Source")后,Source子目录的CMake脚本创建了新的可执行目标CMakeTarget,但这个目标没有配置GLFW依赖:既没有通过target_link_libraries链接GLFW,也没有手动添加GLFW的头文件包含路径。
  3. 问题核心是你可能误将编译目标切换为CMakeTarget而非原来的Project。如果CMakeTarget对应的源文件(比如Game Engine.cpp)也包含了GLFW头文件,或者你不小心把main.cpp纳入了CMakeTarget的编译范围,就会触发找不到头文件的错误;即使main.cpp仍属于Project目标,若错误选择CMakeTarget进行编译,也会出现该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:32:27