Как создать динамические определения для Visual Studio?

У меня есть проект C ++, который основан на нескольких платформах.

В Mac OSX и Linux я использую SConstruct, что позволяет мне иметь некоторую «сообразительность» в отношении различных этапов компиляции. А именно, я мог бы поместить версию программы в файл с именем VERSION в корне хранилища, содержание которого просто:

2.0

В сборке SConscript мне просто нужно открыть, прочитать и проанализировать этот файл, и я могу создавать динамические определения на его основе. Например:

env.Append(CXXFLAGS=['-DVERSION_MAJOR=%s' % open('VERSION').read().split('.')[0]])

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

Теперь для Windows, у меня есть .sln файл с разными .vcxproj файлы, в которые я хотел бы сделать что-то подобное, кроме как я понятия не имею, как.

Подводя итог, мой вопрос заключается в следующем: как я могу иметь такие «умные» определения (чтение, анализ файла и помещение его содержимого в несколько переменных среды) без необходимости изменения .sln/.vcxproj файлы вручную на каждой версии смены?


Я знаю, что мог бы также использовать SCons в Windows, но я бы не хотел (в основном потому, что он кажется менее популярным на платформе, и я не хочу пугать потенциальных участников, которые знают только инструменты для Windows).

1

Решение

Обычный способ сделать это — определить ваши константы во включаемом файле:
например

// Version.h - Autogenerated, don't edit
#define VERSION_MAJOR 1

Затем вы пишете скрипт или программу (на вашем любимом языке) для получения версии откуда-то и динамически пишите Version.h. Возможно, проанализируйте старый Version.h и увеличьте или получите его из какого-либо внешнего источника.

В Visual Studio создайте пользовательский шаг сборки для Version.h и сделайте его зависимым от чего-то, что вынуждает его обновляться при каждой сборке.

1

Другие решения

Вы можете сохранить текущее решение, а для Windows — интегрировать его с решением Visual Studio и файлами проектов, созданными SCons, используя MSVSProject() строитель или MSVSSolution() строитель.

Вы можете найти больше информации об этих строителях SCons Вот.

0