如果标头不存在,如何编译?

时间:2017-06-10 17:17:48

标签: build header-files optional-arguments

#include "MyHeader.h"

我希望MyHeader.h是可选的,即即使它不可用也要构建 我可以使用预处理器,而不涉及构建系统吗?

1 个答案:

答案 0 :(得分:1)

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

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

但是那仍然需要以某种方式从构建系统中输入。

仅在文件存在的情况下,标准预处理器中没有用于引入文件的功能,但是您可能需要检查几种途径,例如:

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

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

  3. 考虑在编译时是否需要。只有在需要影响实际的编译本身时,才需要这样做。如果仅是影响程序在运行时的行为方式,则可以很容易地获得程序读取的配置文件,并使用该信息来更改行为。这样,您可以检测到不存在的文件并忽略它。