У нас есть несколько проектов в разработке, использующих одну и ту же кодовую базу. Определенные фрагменты кода относятся только к одному или другому из этих проектов.
У нас есть пара требований:
Первое требование состоит в том, что мы хотим, чтобы наши окончательные выпуски не компилировались в коде из других проектов.
Одним из решений (которое нам нравится) является использование препроцессора для удаления этого кода: (это то, что мы делаем в некоторых местах).
#if defined PROJECT1
{
// some code
}
#endif
Второе требование заключается в том, что во время разработки полезно убедиться, что изменение кода по-прежнему работает во всех проектах, поэтому мы хотели бы скомпилировать ВСЕ код проекта сразу и иметь возможность переключаться между проекты без перекомпиляции - поэтому в других местах нашего кода мы используем переменную для определения проекта:
if (project == 1)
{
// some code
}
Что я хотел бы сделать, так это объединить преимущества обоих - кода, который в некоторых ситуациях (скажем, определяется #define REMOVECODE) вообще не включается в финальный exe, но в других ситуациях (определяется не определением определения REMOVECODE) для включения кода в скомпилированный файл .exe
Еще одна вещь - иногда у нас есть код, который существует в нескольких проектах, поэтому решение должно обрабатывать такие тесты, как «if project == 1 || project == 2»
Я думаю, это выглядело бы примерно так (это не работает, потому что я не думаю, что вы можете вкладывать директивы препроцессора), но я не уверен, возможно ли это даже с макросами. Может быть, есть какое-то шаблонное решение?
#ifdef REMOVECODE
#define BEGINTEST #if
#define ENDTEST #endif
#define CONDITION1 defined PROJECT1
#else
#define BEGINTEST if
#define ENDTEST
#define CONDITION1 project == 1
#endif
BEGINTEST(CONDITION1)
{
// some code
}
ENDTEST
Если кто-нибудь может помочь, я буду очень признателен.