Inclusión condicional en C

¿Hay alguna manera de hacer una inclusión condicional con el preprocesador c?

Tengo una "biblioteca" de herramientas (Tools.c, Tools.h), compartida por diferentes equipos. Esta biblioteca depende de una segunda, que proporciona capacidades XML. Llamemos a ese XML.h Ahora, un equipo usa una versión simple de la segunda biblioteca (XML.h), mientras que otro equipo usa una versión extendida (XMLEx.h) en su proyecto. El segundo equipo no quiere incluir el XML.h porque ya tiene XMLEx.h incluido, proporcionando todas las funciones de XML.h.

¿Existe un mecanismo para implementar algo como:

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

solo con el#define XML_EX ¿En un nivel más alto (proyecto)? Me gusta

#include "Tools.h"

para el Equipo 1 y

#define XML_EX
#include "Tools.h"

para el equipo 2? (Sé que una solución simple no funcionaría, es más que ilustrar el "flujo de trabajo" deseado).

Las condiciones de frontera son:

Sistema de WindowsCVI / LawWindows IDEno hacer archivosTools.h debe compilar sin un proyecto externo.

EDITAR: Para la solución sugerida y la sugerencia, que es la forma común, tal vez tenga algo que ver con mi proceso de compilación, pero no funciona. El IDE se está quejando de la falta de XML.h para el equipo 2. Supongo que es porque el IDE intenta compilar primero cada fuente independiente, sin conocer la definición "externa".

EDITAR: Supongamos que el equipo A es un grupo de idiotas que solo pueden presionar el botón "RUN" en el IDE. Por lo tanto, lo mejor es trabajar fuera de la caja.

EDIT: Está bien, me desconcertó. Todo lo que he aprendido me dice que debería funcionar. Aquí hay un conjunto mínimo, que he probado:

C Principal

#define XML_EX
#include "Tools.h"

void main(void)
{
  test();
}

entonces Tools.h

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

XMLEx.h tiene la función de prueba y XMLEx.c lo implementa. Si intento compilar, obtengo un "XML.h no encontrado". Todo funciona bien con un#define XML_EX en el Tools.h.

Respuestas a la pregunta(3)

Su respuesta a la pregunta