首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过msbuild设置vcbuild环境

通过msbuild设置vcbuild环境
EN

Stack Overflow用户
提问于 2009-11-26 13:20:01
回答 2查看 2.5K关注 0票数 0

我有一个msbuild文件,用于构建多个C++项目(*.vcproj)。下面是典型项目文件的一部分,在该文件中,构建的全局环境变量作为属性被重写:

代码语言:javascript
复制
<PropertyGroup>
  <MYBINDIR>d:\buildsysroot\bin</MYBINDIR>
  <MYLIBDIR>d:\buildsysroot\lib</MYLIBDIR>
  ...
</PrpertyGroup>

<ItemGroup>
  <MyItems Include="d:\buildsysroot\myproject\myproject.vcproj"/>
</ItemGroup>

<Target Name="Release_x64">
  <VCBuild Projects="@(MyItems)" Configuration="Release_dll|x64"/>
</Target>

所有vcproj文件都通过属性表使用这些环境变量。下面是一个vcproj的摘录:

代码语言:javascript
复制
<Configuration
  Name="Release_dll|x64"
  ConfigurationType="1"
  InheritedPropertySheets="$(BUILDPROPSDIR)\defaults.vsprops;$(BUILDPROPSDIR)\build_dll.vsprops"
>

这就是房地产说明书的样子:

代码语言:javascript
复制
<VisualStudioPropertySheet
  Name="defaults"
  OutputDirectory="$(MYBINDIR)\_$(ConfigurationName)_$(PlatformName)"
  IntermediateDirectory="$(MYBUILDDIR)_$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
  >
  <Tool
    Name="VCLinkerTool"
    AdditionalLibraryDirectories="&quot;$(MYLIBDIR)&quot;"
  />
<VisualStudioPropertySheet/>

问题是:在构建时,msbuild文件( MYBINDIR,MYLIBDIR)中声明的环境变量的值并不是将其放入属性表中,而是似乎仅是msbuild文件的本地变量:在msbuild项目MYBINDIR中扩展到"d:\buildsysroot\bin",但在vc项目MYBINDIR中,MYBINDIR扩展到"d:\projects\bin",这是我在全局设置的值(例如通过MyComputer->Advanced-> environment variables设置的值),并且必须保持在那里,因为它是如何设置我的主要开发环境的。

如何将msbuild文件中的环境集传递给VCBuild任务?

我知道这个问题可以通过使用批处理文件并使用'set‘声明环境来解决,而不是在msbuild文件中声明;这就是我以前所做的,但是我更喜欢上面的方法,因为它只是一个带有一个参数的msbuild调用,也就是它。

编辑

我需要一个快速的解决方案,并想出了一个自定义任务,它以批处理文件的方式设置环境,但是在msbuild中这样做的好处是。任务的Execute()方法只执行Environment.SetEnvironmentVariable( var,val )。这仍然需要设置过程的环境,我很高兴听到如果有其他方式!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-01 20:17:22

由于没有其他人回答/评论,所以我将使用自己的答案:使用Environment.SetEnvironmentVariable( var,val )设置进程环境的自定义任务。

票数 0
EN

Stack Overflow用户

发布于 2009-12-09 22:15:41

我不知道这是否符合你想做的事。但是,您是否尝试过VCBuild任务上的“覆盖”属性?如何使用它并不是显而易见的。但是我有VS用我关心的属性(OutputDirectory和IntermediateDirectory)为我创建了一个OutputDirectory。然后,我编辑了.vcproj文件以删除它添加的InheritedPropertySheets属性。然后,我在我的VCBuild文件中向MSBuild任务添加了一个覆盖属性。这似乎给了我我想要的行为。可能是另一个问题,不过.

唐尼

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1803630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档