如果 header 不存在,如何编译?

How to compile if a header does not exist?

#include "MyHeader.h"

我希望 MyHeader.h 是可选的,即即使它不可用也要构建。
我可以在不涉及构建系统的情况下使用预处理器来完成吗?

不,不是真的,反正不是标准预处理器。 #include 指令是一个相当简单的指令,它基本上只是将对象拖入,就好像它是翻译单元的一部分一样。您可以将包含包含在宏检查中:

#ifdef USE_MY_HEADER
    #include "MyHeader.h"
#endif

但这仍然需要构建系统以某种方式输入。

标准预处理器中没有仅在文件存在时才引入文件的工具,但您可能需要检查多种途径,例如:

  1. 只要确保总是一个文件,即使是空文件。这样,您就可以轻松地包含它,并且用户可以对其进行修改以添加他们需要的任何内容。他们就是无法删除它。

  2. 让你的构建系统在编译任何使用它的东西之前检查文件是否存在,如果不存在,就创建一个空文件。

  3. 想想编译时是否需要。只有当它需要影响实际的 编译 本身时,才应该这样做。如果它只是为了影响程序在 运行 时间的行为方式,您可以轻松地拥有一个由您的程序读取的配置文件并使用该信息来更改行为。这样,您可以检测到一个不存在的文件并忽略它。