Используйте переменную окружения в качестве постоянной времени компиляции в C++

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

Например, скажем, я определил переменную среды с именем BUILD_VERSION и установите его 1.0.0, при компиляции хочу 1.0.0 запекаться в моем коде. НАПРИМЕР:

Пакетный файл:

set BUILD_VERSION = 1.0.0
; call vs compiler

Файл C++:

const std::string build_version = BUILD_VERSION // Which will result in "1.0.0".

Как бы я поступил так?

3 ответа

Решение

В конце я последовал совету txtechhelp и добавил /D Отметьте в командной строке -> Дополнительные параметры раздела свойств проекта, чтобы объявить переменную среды в качестве определения препроцессора.

Это выглядело примерно так:

Затем в пакетном скрипте, который начал сборку:

set SVN_BUILD_VERSION=1.0.0

И, наконец, извлечь его в виде строки в исходном коде:

#define STRINGIZER(arg)     #arg
#define STR_VALUE(arg)      STRINGIZER(arg)
#define BUILD_VERSION_STRING STR_VALUE(BUILD_VERSION)

// ...

const std::string version = BUILD_VERSION_STRING; // Results in "1.0.0".

Вы можете использовать шаг предварительной сборки (я полагаю, вы находитесь в Visual Studio), который запустит скрипт, который получит значение этой переменной среды, проанализирует исходный файл C++ и изменит значение "1.0.0.0" на "1.0.0.1".

Такое замещение может быть удобно сделано с помощью awk.

VERSION_INFO ресурс может быть хорошим путем.

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

Для этого в командной строке:

  • Перенаправить вывод из пакетного файла в файл [.rc], определяющий ресурс.

  • Скомпилируйте ресурс используя rc.exe,

  • Вставить полученный .res файл, просто передав его компоновщику.

В Visual Studio это может быть сложнее.

Другие вопросы по тегам