Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 Visual Studio预生成事件和批处理集_Visual Studio 2008_Visual C++_Msbuild_Build Process_Build Automation - Fatal编程技术网

Visual studio 2008 Visual Studio预生成事件和批处理集

Visual studio 2008 Visual Studio预生成事件和批处理集,visual-studio-2008,visual-c++,msbuild,build-process,build-automation,Visual Studio 2008,Visual C++,Msbuild,Build Process,Build Automation,我试图创建一个批处理文件,在构建之前设置一组环境变量 批处理文件如下所示(它是在检测ATI Stream SDK或NVidia CUDA toolkit之前自动生成的): set OCL_LIBS_X86=“%ATISTREAMSDKROOT%LIBS\X86” 设置OCL_LIBS_X64=“%ATISTREAMSDKROOT%LIBS\x86_64” 设置OCL_INCLUDE=“%ATISTREAMSDKROOT%INCLUDE” 但是,构建的其余部分似乎无法访问这些变量,因此,当我尝试在

我试图创建一个批处理文件,在构建之前设置一组环境变量

批处理文件如下所示(它是在检测ATI Stream SDK或NVidia CUDA toolkit之前自动生成的):
set OCL_LIBS_X86=“%ATISTREAMSDKROOT%LIBS\X86”
设置OCL_LIBS_X64=“%ATISTREAMSDKROOT%LIBS\x86_64”
设置OCL_INCLUDE=“%ATISTREAMSDKROOT%INCLUDE”

但是,构建的其余部分似乎无法访问这些变量,因此,当我尝试在C/C++>General>Additional INCLUDE目录中引用$(OCL_INCLUDE)时,它将首先警告我未找到环境变量$(OCL_INCLUDE),并且当我尝试包含CL/CL.hpp时,编译将失败,原因是:

致命错误C1083:无法打开包含文件:“CL/CL.hpp”:没有此类文件或目录


我知道如果我想从VisualStudioGUI访问这些变量,我可以将它们放入注册表,但我真的不希望这样做。有没有办法让这些环境变量在预构建事件之后保持不变?我不能直接引用$(ATISTREAMSDKROOT),因为该项目必须能够同时为ATI Stream和NVidia Cuda生成。

预生成事件在它自己的shell中执行(VS生成cmd.exe进程),因此,所有要设置的调用都是该实例的本地调用。 既然您说您的批处理文件是预生成的,那么就不需要使用预构建事件,是吗?因为还有其他方法可以让VS访问这些变量:

不只是启动VS,而是启动一个shell,调用批处理文件,然后启动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方式”来处理变量。通过在常规项目设置中设置“继承的项目属性”,或将“继承的属性表=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>

<?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>