В Visual Studio 2003 я пытаюсь установить переменную среды в событии предварительной сборки, которое затем будет использоваться на этапе компиляции, но значение, похоже, не распространяется. Например, если событие pre-build содержит это (либо непосредственно, либо внутри пакетного файла):
set MY_LIB_VERSION=1.0.0
и AdditionalIncludeDirectories имеет следующее:
c:\path\to\library\my_lib_v$(MY_LIB_VERSION)\include
то я ожидаю, что компиляция будет работать, если существует каталог my_lib_v1.0.0
. Но вместо этого я получаю
c:\path\to\prog\my_prog.c(22) : fatal error C1083: Cannot open include file: 'my_lib.h' Project : warning PRJ0018 : The following environment variables were not found: $(MY_LIB_VERSION)
Я выводю, что переменная окружения, установленная в событии предварительной сборки, поэтому не распространяется на этап компиляции, но мне может быть что-то не хватает.
Как установить переменную среды в событии предварительной сборки и использовать ее на этапе компиляции?
(В качестве альтернативы, любые другие разумные способы определения версии библиотеки один раз и использование ее несколько раз для дополнительных файлов и дополнительных библиотек будут делать то же самое.)
Обновление. Я решил решить нашу проблему по-другому. Мы используем Subversion и настраиваем свойство svn:externals
в подкаталоге источника проекта с именем dependencies
, так что проверка проекта дополнительно проверит <svn_path>\libraries\my_lib_v1.0.0
и называет его dependencies\my_lib
в рабочей копии. Тогда параметры проекта могут относиться к dependencies\my_lib\include
и тому подобное. Обновление до версии 1.0.1 из my_lib
- это просто вопрос редактирования свойства svn:externals
- не нужно было изменять параметры кода и проекта.