我正在编写库例程,其中一些特性可以通过#include配置文件来定制。但是,我希望此配置文件是可选的,源中提供了一些默认参数。这是一个典型的来源:
#include "userconf.h"
#ifndef BUFSIZE
#define BUFSIZE 100
#endif
...
其中file userconf.h
(如果存在)包含:
#define BUFSIZE 255
标准编译器(gcc或其他)认为缺少#include
文件是错误的(他们是对的!)。在这种情况下,并且仅针对此行,我希望编译器继续无异议,因为为缺少的配置文件中的参数提供了默认值。
有办法做到这一点吗?
注意:我不介意检查make系统中存在的文件(我使用CMake)并传递-Doption
,如果这样更容易要做(但是,请为它提供CMake指令,我不熟悉它,打开文档很难抓住整个图片。)
答案 0 :(得分:0)
我在包含错误的文件时“偶然”找到了答案。
您可以利用编译器的多个包含目录搜索功能(aka。-I
选项)。您可以安排-I
选项列表,以便有一个目录,优先在链的末尾,包含配置文件的骨架版本。
例如,目录default/
包含以下userconf.h
:
#define BUFSIZE 255
并且开发目录develop/
包含 live userconf.h
:
#define BUFSIZE 100
然后,可以使用
编译原始问题的源文件gcc source.c -Idevelop -Idefault ...
如果它是默认搜索目录的一部分,则可以省略和-Idevelop
。