Используйте переменную окружения в качестве постоянной времени компиляции в 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 это может быть сложнее.