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

C++17游戏引擎:如何通过CMake自动生成含entities目录所有头文件的entitylist.h?

自动生成entitylist.h的CMake实现方案

完全可以通过CMake在构建阶段自动完成这个需求,不需要手动维护entitylist.h。下面是针对你的C++17、Visual Studio环境的具体实现步骤:

1. 准备模板文件

把原来手动维护的entitylist.h替换成模板文件entitylist.h.in,内容如下(可保留必要的注释和预处理指令):

// 此文件由CMake自动生成,请勿手动编辑
#pragma once

@ENTITY_INCLUDES@

2. 在CMakeLists.txt中添加自动生成逻辑

在项目的CMake脚本中加入以下代码,实现扫描头文件、生成include语句并输出最终的entitylist.h:

# 1. 扫描entities目录下的所有头文件(可根据需求调整路径和扫描规则)
file(GLOB_RECURSE ENTITY_HEADERS "${CMAKE_SOURCE_DIR}/entities/*.h")

# 2. 生成所有头文件的#include语句
set(ENTITY_INCLUDES "")
foreach(HEADER ${ENTITY_HEADERS})
    # 计算头文件相对于源码根目录的路径,保证include路径正确
    file(RELATIVE_PATH REL_HEADER "${CMAKE_SOURCE_DIR}" ${HEADER})
    string(APPEND ENTITY_INCLUDES "#include \"${REL_HEADER}\"\n")
endforeach()

# 3. 从模板生成最终的entitylist.h,输出到构建目录避免污染源码
configure_file(
    "${CMAKE_SOURCE_DIR}/entitylist.h.in"
    "${CMAKE_BINARY_DIR}/generated/entitylist.h"
    @ONLY
)

# 4. 将生成文件所在目录添加到项目的include路径
target_include_directories(你的游戏引擎/编辑器目标名 PRIVATE "${CMAKE_BINARY_DIR}/generated")

3. 处理文件更新依赖

为了保证当entities目录下添加/删除头文件时,CMake会自动重新生成entitylist.h,可以添加自定义目标管理依赖:

add_custom_target(generate_entitylist
    DEPENDS ${ENTITY_HEADERS}
)

# 让项目目标依赖这个生成任务,确保构建前先更新entitylist.h
add_dependencies(你的游戏引擎/编辑器目标名 generate_entitylist)

4. 可选:过滤不需要包含的头文件

如果entities目录下有内部用的头文件不需要被关卡编辑器识别,可以在扫描时排除:

file(GLOB_RECURSE ENTITY_HEADERS 
    "${CMAKE_SOURCE_DIR}/entities/*.h" 
    EXCLUDE "${CMAKE_SOURCE_DIR}/entities/internal/*.h"  # 排除internal子目录的文件
)

使用方式

现在用户添加自定义实体时,只需要将Foo.h放入entities目录,直接构建项目即可——CMake会自动扫描到新文件并更新entitylist.h的include语句,无需任何手动编辑操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:30:16