我意识到之前发布了类似的问题,但我需要稍微不同的解决方案 我有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;项目中,并具有以下约束
我尝试在main函数中添加代码,比如
_putenv(&#34; PATH = .... \ lib \ simulink&#34;);
但是这不起作用,因为在编译主文件之前,它需要从指定的路径中搜索dll,它就是这样的。
任何人都可以建议一个简单,可移植的修复程序,我可以通过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
答案 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即可解决。