我有一个微控制器,但有几个项目是从相同的源代码编译的。我认为我的情况与您的情况相似,至少在某种程度上是这样。我的解决方案也受到 Linux 内核的启发。
config.h
所有需要访问某些配置参数的源代码都只包含一个名为config.h
.
config.h
仅包含一行:
#include <config/project.h>
project.h
我有几个配置头文件,每个项目一个。A由具有、或常量project.h
等值的宏定义组成:true
false
#define CONFIG_FOO true
#define CONFIG_BAR false
#define CONFIG_TIME 100
check.c
此文件检查配置参数的正确性: -必须定义所有参数,即使未使用或对该项目有意义 - 发出不需要的参数组合的信号 - 限制参数值。
#if !defined(CONFIG_FOO)
#error CONFIG_FOO not defined
#endif
#if !defined(CONFIG_BAR)
#error CONFIG_BAR not defined
#endif
#if !defined(CONFIG_TIME)
#error CONFIG_TIME not defined
#endif
#if !(CONFIG_FOO ^ CONFIG_BAR)
#error either CONFIG_FOO or CONFIG_BAR should be se
#endif
#if CONFIG_TIME > 250
#error CONFIG_TIME too big
#endif
Makefile
通过指示编译器输出预处理器宏,可以(通过一些sed
表达式)为给Makefile
定项目提供相同的参数值 gprovided。