有没有一种方法可以使用c预处理器进行条件包含?
我有一个工具库(Tools.c、Tools.h),由不同的团队共享。该库依赖于第二个提供XML功能的库。我们称其为XML.h。现在,一个团队使用第二个库的普通版本(XML.h),而另一个团队在其项目中使用扩展版本(XMLEx.h)。第二个团队不想包含XML.h,因为他们已经包含了提供XML.h所有功能的XMLEx.h。
有没有一种机制可以实现类似以下内容:
#ifdef XML_EX
#include "XMLEx.h"
#else
#include "XML.h"
#endif
只需要在更高的(项目)级别上使用#define XML_EX
吗?例如
#include "Tools.h"
针对团队1和
#define XML_EX
#include "Tools.h"
针对第二个团队?(我知道简单的解决方案不起作用,更多是为了说明所需的“工作流程”。)
边界条件是:
- Windows系统
- CVI / LawWindows IDE
- 没有make文件
- Tools.h应该可以在没有外部项目的情况下编译。
编辑:对于建议的解决方案和提示,这可能与我的构建过程有关,但它不起作用。IDE抱怨找不到团队2的XML.h。我猜这是因为IDE首先尝试编译每个源码,而不知道“外部”#define。
编辑:假设A团队是一群只会按IDE中的“运行”按钮的白痴。因此,最好能够开箱即用。
编辑:好吧,这让我感到困惑。我学到的所有东西都告诉我,它应该起作用。这是我测试过的一个最小设置:
main.c
#define XML_EX
#include "Tools.h"
void main(void)
{
test();
}
然后是 Tools.h。
#ifdef XML_EX
#include "XMLEx.h"
#else
#include "XML.h"
#endif
XMLEx.h文件有测试函数,XMLEx.c文件实现了该函数。但是如果我尝试构建它,会出现“XML.h未找到”的错误。在Tools.h中加入
#define XML_EX
后就可以顺利构建了。
XML_EX
,并且被Team 2使用——这是将定义放在项目设置中而不是源文件中的好理由。 - Steve Jessop