cプリプロセッサで条件付きインクルードを作成する方法はありますか?
さまざまなチームで共有されているツールの「ライブラリ」(Tools.c、Tools.h)があります。このライブラリは2番目のライブラリに依存しており、XML機能を提供します。これを1つのXML.hと呼びましょう。1つのチームが2番目のライブラリのプレーンバージョン(XML.h)を使用し、別のチームがプロジェクトで拡張バージョン(XMLEx.h)を使用します。2番目のチームはXMLEx.hがすでに含まれており、XML.hのすべての機能を提供しているため、XML.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"
チーム2の場合?(単純なソリューションでは機能しないことはわかっています。目的の「ワークフロー」を説明することをお勧めします。)
境界条件は次のとおりです。
- Windowsシステム
- CVI / LawWindows IDE
- メイクファイルなし
- 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が見つかりません」というメッセージが表示されます。#define XML_EX
Tools.hのaを使用すると、すべてが正常に構築されます。