Условный #include в C

Есть ли способ сделать условное включение с препроцессором c?

У меня есть "библиотека" инструментов (Tools.c, Tools.h), совместно используемых различными командами. Эта библиотека зависит от второй, предоставляющей XML-возможности. Давайте назовем это одним XML.h Теперь одна команда использует простую версию второй библиотеки (XML.h), в то время как другая команда использует расширенную версию (XMLEx.h) в своем проекте. Вторая команда неЯ не хочу включать XML.h, потому что в него уже включен XMLEx.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? (Я знаю, что простое решение не будет работать, этобольше, чтобы проиллюстрировать желаемоерабочий процесс».)

Граничными условиями являются:

Система WindowsCVI / LawWindows IDEне делать файлыTools.h должен компилироваться без внешнего проекта.

РЕДАКТИРОВАТЬ: Для предлагаемого решения и подсказка, что это распространенный способ, может быть, это как-то связано с моим процессом сборки, но это не такт работа. IDE жалуется на отсутствие XML.h для команды 2. Думаю, это 'из-за того, что IDE сначала пытается скомпилировать каждый автономный исходный код, не зная овнешний» #define.

РЕДАКТИРОВАТЬ: Let 'Притворись, команда А - это кучка дебилов, как только может ударитьБЕЖАТЬ" Кнопка в 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.

Ответы на вопрос(3)

Ваш ответ на вопрос