Использование CVS для #ifdef моих изменений

У меня есть большой проект, в котором много изменений, которые еще не зарегистрированы. Я хочу зарегистрировать их, но чтобы они вступали в силу только тогда, когда определенный символ #defin'd

CVS действительно имеет возможность форматировать различия, вставляя # ifdef с помощью аргумента --ifdef. Однако это не объединяет # ifdef обратно в мой рабочий файл. Хуже того, вывод включает некоторые уродливые заголовки, которые необходимо удалить.

Index: path/to/my/file.h,v
===================================================================
RCS file: /path/to/my/file.h,v
retrieving revision 1.17
diff --ifdef=TEST -r1.17 file.h

Есть ли у кого-нибудь скрипт, который автоматизирует процесс сравнения CVS, удаляет заголовки и копирует результат обратно в рабочий файл?

Большое спасибо, если кто-нибудь может помочь.


person JoeBieg    schedule 24.11.2009    source источник


Ответы (1)


Я не уверен, что понимаю, что вы хотите сделать, поэтому отвечу на слегка измененный вопрос, если это сделает вашу текущую проблему устаревшей.

Как правило, #ifdef включены, только если они установлены во время компиляции. Даже если они извлечены или возвращены, код в макросе не будет включен, если не будет доступен символ времени компиляции. Например:

#ifdef DEBUG
cerr << "Some debug statement" << endl;
#endif

Если вы не установите параметр -DDEBUG (в GCC см. Документацию вашего компилятора) или #define DEBUG 1 где-то еще в вашем коде (который доступен для #ifdef), приведенный выше оператор отладки не будет скомпилирован в результирующий двоичный файл.

При этом интенсивное использование #ifdef может быстро превратиться в черную дыру в обслуживании и затруднить переносимость вашего кода. Я бы не рекомендовал такую ​​стратегию.

person s1n    schedule 25.11.2009