如何"弱" #include配置文件?

时间:2014-04-04 15:23:44

标签: include c-preprocessor

我正在编写库例程,其中一些特性可以通过#include配置文件来定制。但是,我希望此配置文件是可选的,源中提供了一些默认参数。这是一个典型的来源:

#include "userconf.h"

#ifndef BUFSIZE
#define BUFSIZE 100
#endif

...

其中file userconf.h(如果存在)包含:

#define BUFSIZE 255

标准编译器(gcc或其他)认为缺少#include文件是错误的(他们是对的!)。在这种情况下,并且仅针对此行,我希望编译器继续无异议,因为为缺少的配置文件中的参数提供了默认值。

有办法做到这一点吗?

注意:我不介意检查make系统中存在的文件(我使用CMake)并传递-Doption,如果这样更容易要做(但是,请为它提供CMake指令,我不熟悉它,打开文档很难抓住整个图片。)

1 个答案:

答案 0 :(得分:0)

我在包含错误的文件时“偶然”找到了答案。

您可以利用编译器的多个包含目录搜索功能(aka。-I选项)。您可以安排-I选项列表,以便有一个目录,优先在链的末尾,包含配置文件的骨架版本。

例如,目录default/包含以下userconf.h

#define BUFSIZE 255

并且开发目录develop/包含 live userconf.h

#define BUFSIZE 100

然后,可以使用

编译原始问题的源文件
gcc source.c -Idevelop -Idefault ...
如果它是默认搜索目录的一部分,则可以省略

-Idevelop