Как лучше всего построить варианты одного и того же приложения на C / C ++? - PullRequest
6 голосов
/ 04 ноября 2008

У меня есть три тесно связанных приложения, которые построены из одного и того же исходного кода - скажем, APP_A, APP_B и APP_C. APP_C - это расширенный набор APP_B, который, в свою очередь, является расширенным набором APP_A.

До сих пор я использовал определение препроцессора для определения создаваемого приложения, которое работало так:

// File: app_defines.h
#define APP_A 0
#define APP_B 1
#define APP_C 2

Мои параметры сборки IDE затем укажите (например)

#define APPLICATION APP_B

... а в исходном коде у меня будут такие вещи как

#include "app_defines.h"

#if APPLICATION >= APP_B
// extra features for APPB and APP_C
#endif

Однако сегодня утром я выстрелил себе в ногу и потратил много времени, просто пропустив строку #include "app_defines.h" из одного файла. Все скомпилировалось нормально, но приложение зависало с AV при запуске.

Я бы хотел знать, какой лучший способ справиться с этим. Раньше, как правило, это один из немногих случаев, когда я думал, что можно использовать #define (в любом случае, в C ++), но я все еще плохо себя чувствовал, и компилятор не защищал меня.

Ответы [ 11 ]

0 голосов
/ 04 ноября 2008

Возможно, вы захотите взглянуть на инструменты, которые поддерживают разработку продуктовых линеек и способствуют структурированному управлению вариантами.

Один из этих инструментов - pure :: варианты из pure-systems , который способен управлять изменчивостью с помощью моделей функций и отслеживать различные места, в которых функция реализована в исходном коде.

Вы можете выбрать конкретное подмножество функций из модели объектов, проверяются ограничения между функциями и создается конкретный вариант вашей линейки продуктов, то есть создается определенный набор файлов исходного кода и определений.

...