有沒有辦法用c預處理器做一個條件包含?有條件#include in C
我有一個工具庫(Tools.c,Tools.h),由不同團隊共享。這個庫依賴於第二個庫,提供XML功能。讓我們調用一個XML.h現在一個團隊使用第二個庫(XML.h)的普通版本,而另一個團隊在他們的項目中使用擴展版本(XMLEx.h)。第二個團隊不希望包含XML.h,因爲他們已經包含了XMLEx.h,提供了XML.h的所有功能。
有實施類似的機制:只與#define XML_EX
提出了更高的(項目)級
#ifdef XML_EX
#include "XMLEx.h"
#else
#include "XML.h"
#endif
?像
#include "Tools.h"
爲Team 1和
#define XML_EX
#include "Tools.h"
爲2隊? (我知道,簡單的解決辦法是行不通的,它更說明所需的 「工作流程」。)
邊界條件是:
- 的Windows系統
- CVI/LawWindows IDE
- 沒有make文件
- Tools.h應該在沒有外部項目的情況下進行編譯。
編輯: 對於建議的解決方案和提示,這是常見的方式,也許它與我的構建過程有關,但它不起作用。 IDE抱怨缺少團隊2的XML.h。我想,這是因爲IDE試圖首先編譯每個源代碼,而不知道「外部」#define。
編輯: 讓我們假裝,團隊A是一堆白癡,怎麼只能擊中IDE中的「RUN」按鈕。因此,最好的是開箱即用。編輯: 好吧,它讓我感到困惑。我學到的所有東西都告訴我,它應該起作用。下面是一個最小的一套,我測試過:
的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已經測試功能UND XMLEx.c實現它。如果我嘗試構建,我會得到一個「XML.h未找到」。在Tools.h中,所有內容都可以使用#define XML_EX
。
你試過了嗎?這正是很多系統頭文件的工作原理。 –
@Kerrek:是的。我期望它可以工作,但由於某種原因,我的IDE編譯按鈕不起作用,抱怨缺少Team.h的XML.h。 – Oliver
@Oliver:你必須弄清楚是什麼原因,因爲沒有任何問題代碼發佈在這裏。也許在項目中有另一個文件,其中包含「Tools.h」,而沒有先定義「XML_EX」,Team 2使用這個文件 - 這是將定義放在項目設置而不是源文件中的一個很好的理由。 –