简而言之:我想从当前的源代码生成两个不同的源树,仅基于一个预定义宏定义而另一个未定义,而没有对源进行其他更改.
如果你有兴趣,这是我的故事......
一开始,我的代码很干净.然后我们制作了一个新产品,是的,它更好.但代码只看到相同的外围设备,所以我们可以保持相同的代码.
好吧,差不多.
有一个小条件需要改变,所以我补充说:
#if defined(PRODUCT_A)
condition = checkCat();
#elif defined(PRODUCT_B)
condition = checkCat() && checkHat();
#endif
Run Code Online (Sandbox Code Playgroud)
...到一个且只有一个源文件.在一般的all-source-files-include-this头文件中,我有:
#if !(defined(PRODUCT_A)||defined(PRODUCT_B))
#error "Don't make me replace you with a small shell script. RTFM."
#endif
Run Code Online (Sandbox Code Playgroud)
...除非他们明确定义了产品类型,否则人们无法编译它.
一切都好.哦...除了修改,组件改变,并且由于新硬件工作得更好,我们可以重新编写控制系统.现在,当我查看代码的表面时,有超过60个单独的区域:
#ifdef PRODUCT_A
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)
...或者相同,但是PRODUCT_B.甚至:
#if defined(PRODUCT_A)
...
#elif defined(PRODUCT_B)
...
#endif
Run Code Online (Sandbox Code Playgroud)
当然,有时候理智需要更长的假期,并且:
#ifdef PRODUCT_A
...
#endif
#ifdef PRODUCT_B
...
#endif
Run Code Online (Sandbox Code Playgroud)
这些条件包装了一到两百行(您认为最后一行可以通过切换头文件来完成,但函数名称必须相同).
疯了吧.我最好在源代码库中维护两个独立的基于产品的分支并移植任何常见的更改.我现在意识到这一点.
是否存在可以生成我需要的两个不同源树的东西,仅基于PRODUCT_A被定义和PRODUCT_B未定义(反之亦然),而不接触任何其他东西(即没有包含头,没有宏扩展等)?
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |