【问题标题】:How do I define a C++ macro for including a file如何定义用于包含文件的 C++ 宏
【发布时间】:2015-03-26 18:33:00
【问题描述】:

我需要在我创建的每个 .cpp 中包含一个文件作为虚幻引擎项目的第一行... 这不能在解决方案/项目中的每个 cpp 中包含它,只是我想要的。

那个文件是:

#include "./../../../Public/TemplatePlatformer.h"

虚幻引擎声明它必须是第一个包含。有没有一种方法可以对此进行宏化,以便我只需在一个地方定义它并在每个 cpp 文件的顶部使用宏...几乎就像这里的包含 txt 文件,以便编译器认为标题声明实际上是在顶部?

这个:

MyClass.cpp

#include "./../../../Public/TemplatePlatformer.h"
#include "MyClass.h"

...

MyClass2.cpp

#include "./../../../Public/TemplatePlatformer.h"
#include "MyClass2.h"

...

会变成这样:

MyClass.cpp

INCLUDE_CONFIG
#include "MyClass.h"

...

MyClass2.cpp

INCLUDE_CONFIG
#include "MyClass2.h"

...

【问题讨论】:

  • 您可以使用precompiled header。它不是为此目的而设计的,但基本上它会为所有 cpp 文件添加一些标题
  • 取决于您的编译器。 stackoverflow.com/questions/3387453/… 的可能重复项
  • @BryanChen 我不确定这是什么意思?
  • @BryanChen 预编译标头是一项不同的功能,AFAIK 保证给定标头包含在每个翻译单元中
  • @inetknght 我知道这是不同的功能,但我从不知道它不能保证包含给定的标头?

标签: c++ macros


【解决方案1】:

你可以写:

#include INCLUDE_CONFIG

在您的 Makefile 或其他文件中,使用预定义的 INCLUDE_CONFIG 到您想要的路径来调用您的编译器;例如对于 gcc,标志是:

-DINCLUDE_CONFIG="./../../../Public/TemplatePlatformer.h"

【讨论】:

  • 你知道我在 Visual Studio 2013 中设置的位置吗?
  • 谢谢,完美...我去掉了 -D 部分,效果很好!
  • @Jimmyt1988 我不使用VS,所以不能准确地说,但是项目属性下应该有一个部分可以指定条件定义
【解决方案2】:

一个简单且更灵活的解决方案是创建单独的自定义头文件,其中包含此包含以及您在每个 .cpp 开头需要完成的任何其他操作,然后包含它。

所以你会创建一个 global.h 包含

#include "./../../../Public/TemplatePlatformer.h"

然后在每个.cpp 中,您首先要包括:

#include "global.h"

与基于宏的解决方案相比,它更清晰,而且键入的内容并不多。

【讨论】:

  • 您也可以将../../../Public 添加到您的包含文件搜索路径中,然后在任何地方添加#include <TemplatePlatformer.h>,如果这是您想要完成的。
  • 你完全赢了,这更优雅。谢谢你的朋友!虽然,它似乎确实会干扰其他一些解决方案.. 嗯。
  • 我最终得到:JIMMYT1988_CONFIG_INCLUDE="$(SolutionDir)Source\TemplatePlatformer\Public\TemplatePlatformer.h"
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多