在Visual Studio C ++项目中设置环境变量

时间:2015-07-21 22:58:20

标签: visual-studio-2012

我意识到之前发布了类似的问题,但我需要稍微不同的解决方案 我有VS2012 C ++项目A.vcxproj,它有debug1配置(平台x64),并构建相应的.exe。它还使用来自其他VS2012 C项目B.vcxproj的dll来自必须添加到环境变量的路径。 A.vcxproj.user文件包含以下文本

<LocalDebuggerEnvironment>PATH=%PATH%;C:\Program Files\libsndfile\bin;..\..\lib\simulink\;$(LocalDebuggerEnvironment)  </LocalDebuggerEnvironment>

我需要将此设置自动添加到&#34; A&#34;项目中,并具有以下约束

  1. 我无法将用户文件导出为&#34;每个用户&#34;,因此无法上传到我们的其他用户可以下载的SCM系统。
  2. 我尝试在main函数中添加代码,比如

    _putenv(&#34; PATH = .... \ lib \ simulink&#34;);
    但是这不起作用,因为在编译主文件之前,它需要从指定的路径中搜索dll,它就是这样的。

  3. 任何人都可以建议一个简单,可移植的修复程序,我可以通过SCM和项目文件分发给所有用户。

    我也试过以下:
    - 具有以下内容的已处理批处理文件setpath.bat

    @ECHO %PATH%  set PATH = %PATH%;C:\Program Files\libsndfile\bin;C:\dev\lib\simulink 
    

    - 添加到A.vcxproj设置 - &gt;构建事件 - &gt;预构建 - &gt;命令行

    call  C:\setpath.bat
    

    我在vS操作窗口下看不到添加的路径。 VS用户文件也没有得到更改,并且运行项目抱怨缺少dll错误   - 我试图在执行批处理文件  A.vcxproj设置 - &gt; 自定义构建步骤 - &gt;执行之前&#34;运行&#34;
     但仍然没有结果。

    我想解决方案需要在VS项目运行的时间内为当前环境变量添加所需的路径&#34;运行&#34;。

    感谢
    sedy

3 个答案:

答案 0 :(得分:0)

添加到A.vcxproj设置 - &gt;构建事件 - &gt;预构建事件

call setdllpath.bat

文件包含以下内容:

@ECHO %PATH%
set COMSPEC = "%VCINSTALLDIR%\vcvarsall.bat" amd64
setx PATH "C:\Program Files\libsndfile\bin;..\..\lib\simulink" 
@ECHO %PATH%

因此,一旦我构建项目,关闭Visual Studio并再次打开它,并在项目中运行文件,它会正确地获取dll。

答案 1 :(得分:0)

*.vcxproj.user*.vcxproj.user*.props中的内容使用相同的xml模式,因此可以轻松交换或包含。

首先,如果有用,可以添加UserMacros来定义库的路径。 像下面两个变量一样

PYTHONHOME=$(USERPROFILE)\AppData\Local\Programs\Python\Python37
PYTHONPATH=$(PYTHONHOME)\DLLs;$(PYTHONHOME)\Lib;$(PYTHONHOME)\Lib\site-packages

编辑.vcxproj中添加的<Project>

  <Project .... >
  ...

  <PropertyGroup Label="UserMacros">
  <PYTHONHOME>$(USERPROFILE)\AppData\Local\Programs\Python\Python37</PYTHONHOME>
  <PYTHONPATH>$(PYTHONHOME)\DLLs;$(PYTHONHOME)\Lib;$(PYTHONHOME)\Lib\site-packages;</PYTHONPATH>      </PropertyGroup>

  ...
  </Project>

您可以在内部配置中添加内容之后,执行以下操作来设置$(Path)变量。

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <LocalDebuggerEnvironment>Path=$(Path);$(PYTHONHOME);$(PYTHONHOME)\DLLs;$(PYTHONHOME)\Lib;$(PYTHONHOME)\Lib\site-packages;$(PYTHONHOME)\Scripts;$(PYTHONHOME);</LocalDebuggerEnvironment>

答案 2 :(得分:0)

如果要在事件中分配变量,例如...。

设置ABC = 123

然后,您将不能使用$(ABC),因为在将$(ABC)交给命令行运行之前,它已经得到处理。

您必须使用命令行所使用的%ABC%。它不知道$(ABC)是什么,因为只有Visual Studio才能理解。

为了进一步使事情复杂化,Visual Studio事件编辑器使用%作为转义符。我已经注意到以%D开头的东西是不好的,%K,%Z和%K是好的。

显然,您可以将%25用作%的转义符。

%DESTDIR%不会像乱码一样乱码-因此将其更改为%25DESDIR%25即可解决。