Проблема с вложенными ifs заключается в том, что у вас будет n ^ 2 разных тестов для n проектов.
Вам просто нужно какое-то выражение, которое в этом случае выдаст ошибку времени компиляции. Может быть:
#ifdef PROJA
#define PROJA-TEST "
#else
#define PROJA-TEST ""
#endif
и т. Д. Для B, C и т. Д.
Тогда:
const char *test_only_one_project = PROJA-TEST PROJB-TEST PROJC-TEST " "More than one project is defined!";
РЕДАКТИРОВАТЬ: ... конечно, это только проверяет, что определено нечетное количество проектов. Но это должно работать:
#ifdef PROJA
#define PROJA-TEST (
#endif
и так далее, затем
const char *test_only_one_project = PROJA-TEST PROJB-TEST PROJC-TEST "More than one project is defined!" );