У меня есть проект 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).
Обычный способ сделать это — определить ваши константы во включаемом файле:
например
// Version.h - Autogenerated, don't edit
#define VERSION_MAJOR 1
Затем вы пишете скрипт или программу (на вашем любимом языке) для получения версии откуда-то и динамически пишите Version.h. Возможно, проанализируйте старый Version.h и увеличьте или получите его из какого-либо внешнего источника.
В Visual Studio создайте пользовательский шаг сборки для Version.h и сделайте его зависимым от чего-то, что вынуждает его обновляться при каждой сборке.
Вы можете сохранить текущее решение, а для Windows — интегрировать его с решением Visual Studio и файлами проектов, созданными SCons, используя MSVSProject()
строитель или MSVSSolution()
строитель.
Вы можете найти больше информации об этих строителях SCons Вот.