【发布时间】:2022-10-07 19:22:22
【问题描述】:
我一直在使用 c++ 17、visual studio 和 cmake 制作游戏引擎。
我为关卡制作者制作了一个 GUI。它需要 entitylist.h,它在实体/文件夹中的每个标题都有#include。
如果用户想要创建一个自定义实体 Foo 并将其添加到一个级别:
他们将 Foo.h 添加到实体/
他们将
#include \"Foo.h\"添加到 entitylist.h他们编译并可以将实体放置到 levelmaker GUI 中的关卡
然而,这是愚蠢的。用户不需要摆弄 entitylist.h。这种摆弄是危险的,浪费时间。其他引擎没有这样的要求。
有没有办法在构建时自动将实体/文件夹中每个文件的
#include添加到 entitylist.h 中?
-
在 CMake 中,可以使用file(GLOB) 来收集目录中的所有文件。此命令创建一个包含所有文件的列表变量,因此您可以遍历此变量并使用file(APPEND) 将相应的行写入
entitylist.h。 -
编写一个小程序来遍历目录中的文件,并为每个文件输出一个带有
#include的文件并不难。或者,它可以写入临时文件,并且仅在检测到内容更改时才更新输出文件。也就是说,我会询问为什么您的 GUI 需要一个需要持续更新的 entitylist.h - 如果 GUI 需要目录中的标头列表,为什么它不能遍历目录本身? -
@Tsyvarev 如果您提供一个显示 CMake 风格的答案可能会更好?对于足够了解 CMake 的人来说,我的回答可能很容易翻译成 CMake。我还没到那里。
-
@eflwap:您使用 \"cmake\" 和 \"makefile\" 标签,但您确定它们都是适用的你的问题?如果您开发 CMake 项目,则无需手动编写 Makefile。