如何使用预编译器开关为C项目启用迭代构建?

问题描述

我正在为五个不同的嵌入式控制器开发C代码。过去,我曾经为每个控制器创建一个单独的项目,但是共享代码量约为98%。因此,我合并了所有项目,并通过预处理程序宏对硬件访问进行了抽象。示例:

编译器:

gcc ... -D FS_CONTROLLER_A=STD_ON

代码

#if FS_CONTROLLER_A == STD_ON
int8_t accesspin = 0;
#else
int8_t accesspin = 1; 
#endif

解决方案可节省大量时间,并且像魅力一样工作。不幸的是,迭代构建不起作用。如果构建控制器A,构建环境'sCons'的决策者将为其构建的每个文件创建一个MD5校验和。当我切换到控制器B时,只有预处理器宏会更改。因此,MD5校验和保持不变,并且决策程序不会检测到任何更改并拒绝重建文件

我可以在sCons中实现并注册一个自定义决策器,但这听起来很麻烦。 已经有解决此问题的方法了吗?如果他们提供本机解决方案,我将毫不犹豫地切换到cMake或Gradle。从我的角度来看,任何解决方案都需要在调用决策程序之前运行预处理器。

PS:我知道Keil Arm IDE附带了此功能,但是我想要并且需要使用自己的构建环境。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)