2009-11-26 3 views
0

여러 C++ 프로젝트 (* .vcproj)를 빌드하는 데 사용되는 msbuild 프로젝트 파일이 있습니다. 다음은 빌드에 대한 글로벌 환경 변수가 속성으로 대체되는 전형적인 프로젝트 파일의 일부는 다음과 같습니다msbuild를 통해 vcbuild 환경 설정

<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의 발췌입니다 :

<Configuration 
    Name="Release_dll|x64" 
    ConfigurationType="1" 
    InheritedPropertySheets="$(BUILDPROPSDIR)\defaults.vsprops;$(BUILDPROPSDIR)\build_dll.vsprops" 
> 

그리고 이것은 속성 시트가 ​​보는 방법은 다음과 같습니다

<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은 "d : \ projects \ bin ", 이는 전 세계적으로 설정 한 값입니다 (예 : MyComputer-> Advanced-> EnvironmentVariables) d 내 주 개발 환경이 설정되어 있기 때문에 거기에 있어야합니다.

msbuild 파일에 설정된 환경을 VCBuild 작업에 전달하는 방법은 무엇입니까?

이 문제는 배치 파일을 사용하고 거기에 '설정'을 사용하여 환경을 선언하고 msbuild 파일에서 해결할 수 있음을 알고 있습니다. 그런데 어떻게 사용했는지는 모르겠지만 위의 방법을 선호하는 이유는 하나의 인수만으로 msbuild를 호출하는 것일뿐입니다.

편집

내가하지만 MSBuild를 ..하는 작업 년대에서 그 일의 보너스, 신속하게 솔루션을 필요로하고 배치 파일이 할 것 같은 방법으로 환경을 설정하는 사용자 지정 작업 내놓았다 Execute() 메서드는 단순히 Environment.SetEnvironmentVariable (var, val)을 수행합니다. 이것은 여전히 ​​proces의 환경을 설정해야합니다. 다른 방법이 있다면 듣기 좋을 것입니다!

답변

0

아무도 다른 대답 없기 때문에/나는 내 자신의 대답하겠습니다 주석 : Environment.SetEnvironmentVariable 사용하여 프로세스 '환경 설정 사용자 지정 작업 (VAR을, 발)

0

을이가는 경우 나도 몰라 당신이하려는 일. 하지만 VCBuild 작업에서 "Override"특성을 시도 했습니까? 그것을 사용하는 방법이 눈에 띄게 분명하지 않습니다. 하지만 나는 VS (OutputDirectory 및 IntermediateDirectory)에 관심이있는 특성을 가진 .vsprops를 만듭니다. 그런 다음 .vcproj 파일을 편집하여 추가 한 InheritedPropertySheets 특성을 제거합니다. 그런 다음 MSBuild 파일의 VCBuild 작업에 Override 특성을 추가했습니다. 그게 내가 찾던 행동을 준 것 같습니다.

도니에게 ...하지만, 아이디어에 대한

+0

덕분에 다른 문제 일 수 있습니다 : 참으로 메인의 MSBuild 프로젝트 파일에서 환경 변수를 (WriteLinesToFile를 사용하여 사용하는 사용자 지정 속성 시트를 만들 수있을 것이다 그 이후 주 파일에서 모든 vars가 exepcted로 작동합니다.) 자, 각 프로젝트는 환경 변수를 사용하는 3 개의 속성 시트를 사용합니다. 따라서이 방법을 사용하면 기본적으로 각 빌드 전에이 모든 소품 시트를 다시 작성하여 원래의 소책자 시트와의 불일치를 유발할 수 있습니다. 프로세스 환경 설정 – stijn