Visual Studio Pre сборка событий и пакетный набор - PullRequest
1 голос
/ 30 декабря 2010

Я пытаюсь создать вызов пакетного файла, который устанавливает кучу переменных среды перед сборкой.

Пакетный файл выглядит примерно так (он автоматически создается заранее для обнаружения ATI Stream SDK илиНабор инструментов NVidia CUDA):

<code>set OCL_LIBS_X86="%ATISTREAMSDKROOT%libs\x86"
set OCL_LIBS_X64="%ATISTREAMSDKROOT%libs\x86_64"
set OCL_INCLUDE="%ATISTREAMSDKROOT%include"

Однако остальная часть сборки, похоже, не имеет доступа к этим переменным, поэтому, когда я пытаюсь ссылаться на $ (OCL_INCLUDE) в C / C ++> General> Дополнительные каталоги include, сначала я получу предупреждение, что переменная окружения $ (OCL_INCLUDE) не найдена, и когда я попытаюсь включить CL / cl.hpp, компиляция завершится неудачно:

Неустранимая ошибка C1083: Невозможно открыть включаемый файл: 'CL / cl.hpp': Нет такого файла или каталога

Я знаю, что мог бы поместить эти переменные в реестр, если бы хотел получить к ним доступ изВизуальная студия GUI, но я бы действительно предпочел не делать этого.Есть ли способ заставить эти переменные среды оставаться после событий перед сборкой?Я не могу ссылаться на $ (ATISTREAMSDKROOT) напрямую, потому что проект должен быть в состоянии собрать как для ATI Stream, так и для NVidia Cuda.

1 Ответ

2 голосов
/ 31 декабря 2010

событие предварительной сборки выполняется в собственной оболочке (VS порождает процесс cmd.exe), поэтому все ваши вызовы set являются локальными только для этого экземпляра.Поскольку вы говорите, что ваш пакетный файл предварительно сгенерирован, нет необходимости использовать событие предварительной сборки, не так ли?Поскольку существуют другие способы получить VS для доступа к этим переменным:

Вместо простого запуска VS, запустите оболочку, вызовите пакетный файл, затем запустите devenv.exe.Или создайте пакетный файл, чтобы сделать все это:

set OCL_LIBS_X86="%ATISTREAMSDKROOT%libs\x86"
set OCL_LIBS_X64="%ATISTREAMSDKROOT%libs\x86_64"
set OCL_INCLUDE="%ATISTREAMSDKROOT%include"
%comspec% /k "%VCINSTALLDIR%\vcvarsall.bat" x86
devenv.exe

Другой вариант: вместо создания пакетного файла создайте лист свойств, содержащий переменные, и включите в свой проект (ы) лист свойств.Таким образом, вы не прибегаете к переменным окружения, это скорее «способ VS» для работы с переменными.Добавьте файл, установив «Унаследованные свойства проекта» в общих настройках проекта или добавив «InheritedPropertySheets = my.vsprops» в раздел «Конфигурация» в файле vcproj.Пример файла листа свойств:

<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioPropertySheet
ProjectType="Visual C++"
Version="9.00"
Name="toolkit_selector"
>
<UserMacro
    Name="OCL_LIBS_X86"
    Value="$(ATISTREAMSDKROOT)libs\x86"
/>
<UserMacro
    Name="OCL_INCLUDE"
    Value="$(ATISTREAMSDKROOT)include"
/>
</VisualStudioPropertySheet>
...