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