Warunkowe #include w C

Czy istnieje sposób na warunkowe włączenie do preprocesora c?

Mam „bibliotekę” narzędzi (Tools.c, Tools.h), udostępnianą przez różne zespoły. Ta biblioteka zależy od drugiej, zapewniając możliwości XML. Nazwijmy to jednym XML.h Teraz jeden zespół używa zwykłej wersji drugiej biblioteki (XML.h), podczas gdy inny zespół używa wersji rozszerzonej (XMLEx.h) w swoim projekcie. Drugi zespół nie chce dołączać XML.h, ponieważ zawiera już XMLEx.h, zapewniając wszystkie funkcje XML.h.

Czy istnieje mechanizm implementujący coś takiego:

#ifdef XML_EX
#include "XMLEx.h"
#else
#include "XML.h"
#endif

tylko z#define XML_EX na wyższym poziomie (projektu)? Lubić

#include "Tools.h"

dla zespołu 1 i

#define XML_EX
#include "Tools.h"

dla Drużyny 2? (Wiem, że proste rozwiązanie nie zadziała, chodzi raczej o zilustrowanie pożądanego „przepływu pracy”).

Warunki brzegowe to:

System WindowsCVI / LawWindows IDEnie tworzy plikówTools.h powinien skompilować się bez zewnętrznego projektu.

EDYCJA: Dla sugerowanego rozwiązania i podpowiedzi, że jest to powszechny sposób, może ma to coś wspólnego z moim procesem budowania, ale nie działa. IDE skarży się na brak XML.h dla zespołu 2. Chyba dlatego, że IDE próbuje najpierw skompilować każde niezależne źródło, nie wiedząc o „zewnętrznym” #define.

EDYCJA: Udawajmy, że zespół A to garstka kretynów, jak tylko można nacisnąć przycisk „URUCHOM” w IDE. Dlatego najlepiej jest pracować poza pudełkiem.

EDIT: Ok, to mnie zdziwiło. Wszystko, czego się nauczyłem, mówi mi, że powinno działać. Oto minimalny zestaw, który testowałem:

main.c

#define XML_EX
#include "Tools.h"

void main(void)
{
  test();
}

następnie Tools.h

#ifdef XML_EX
  #include "XMLEx.h"
#else
  #include "XML.h"
#endif

XMLEx.h ma funkcję testową, a XMLEx.c ją implementuje. Jeśli spróbuję zbudować, otrzymam „Nie znaleziono XML.h”. Wszystko dobrze się układa#define XML_EX w Tools.h.

questionAnswers(3)

yourAnswerToTheQuestion