Задача VCBuild в MSBuild - изменить выходной путь - PullRequest
3 голосов
/ 22 ноября 2010

Я пытаюсь написать автоматическую сборку для одного из наших продуктов и натолкнулся на стену для некоторых наших проектов VC ++: мне нужно иметь возможность указать путь вывода, где будут находиться сборкиСкопировано, как только будет сделано.

Вот временный файл msbuild:

<Project DefaultTargets="Build"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="3.5">
 <Target Name="Build">
   <VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj"
            ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages"
            Configuration="Debug" />
 </Target>
</Project>





Ответ Стейна:

Я думал, что воспользуюсь этим пробелом, чтобы уточнить, как лично я использовал ответ Стейна, чтобы решить эту проблему.У него есть некоторый код в его файле MSBuild, который пишет для него файл vsprops.Я решил использовать более простой подход и просто написать файл вручную.

Я создал этот файл с именем build.vsprops (мой путь вывода V:)

<?xml version="1.0"?>
<VisualStudioPropertySheet ProjectType="Visual C++"
                           Version="8.00"
                           Name="Overrides"
                           OutputDirectory="V:\">
  <Tool Name="VCCLCompilerTool"
        AdditionalUsingDirectories="V:\" />
</VisualStudioPropertySheet>

Затем я отредактировал свойФайл MSBuild для добавления параметра Override:

<Project DefaultTargets="Build"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="3.5">
 <Target Name="Build">
   <VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj"
            ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages"
            Configuration="Debug"
            Override="$(MSBuildProjectDirectory)\build.vsprops" />
 </Target>
</Project>

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

посмотрите на параметр Override для задачи VCBuild .По сути, вы указываете лист свойств, который вы можете использовать для переопределения любого свойства, которое вы хотите (это имеет тот же эффект, что и добавление листа свойств в начало списка в проекте в VS).Вы даже можете создать файл переопределения, используя задачу WriteLinesToFile.

Пример:

<PropertyGroup>
  <VCOverridesFile Condition=" '$(VCOverridesFile)'=='' ">overrides.vsprops</VCOverridesFile>
  <VCOverridesOpen>%3C?xml version=%221.0%22?%3E%0D%0A%3CVisualStudioPropertySheet ProjectType=%22Visual C++%22 Version=%228.00%22 Name=%22My Overrides%22%3E</VCOverridesOpen>
  <VCOverridesClose>%3C/VisualStudioPropertySheet%3E</VCOverridesClose>
  <MyOutPath>&lt;Tool Name="VCLinkerTool" OutputFile ="c:\my.exe"/&gt;</MyOutPath>
</PropertyGroup>

<Target Name="WriteOverridesFile">
  <WriteLinesToFile
    File="$(VCOverridesFile)"
    Lines="$(VCOverridesOpen);$(AdditionalVCOverrides);$(VCOverridesClose)"
    Overwrite="true" />
</Target>

Затем передайте $ (VCOverridesFile) свойству Override и убедитесь, что ваша задача VCBuild DependsOnTarget WriteOverridesFile.

0 голосов
/ 23 ноября 2010

Делая это грязным способом, вы можете передавать путь к выходному каталогу через аргументы командной строки msbuild.

msbuild yourProject /p:OutDir=yourPath

Хотя я подозреваю, что должен быть лучший способ выполнить задачу.Основная идея состоит в том, чтобы установить свойство OutDir таким образом, чтобы оно не было переопределено вашим SomeProject.vcproj

...