VS2010 пользовательский инструмент для создания .h файла - PullRequest
0 голосов
/ 27 августа 2011

Я пытаюсь интегрировать пользовательский инструмент сборки в VS2010, который генерирует .h-файл из исходного файла.Я создал .xml, .targets и .props для этого шага.XML в основном копируется из MASM-файла и заканчивается на:

<ItemType Name="FOO" DisplayName="Foo compiler" />
<FileExtension Name="*.foo" ContentType="FOO" />
<ContentType Name="FOO" DisplayName="Foo compiler" ItemType="FOO" />

Это сопоставляет все мои файлы .foo с компилятором Foo, который определен в .props:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
    <AvailableItemName Include="FOO">
      <Targets>FooCompile</Targets>
    </AvailableItemName>
  </ItemGroup>
  <UsingTask TaskName="FOO" TaskFactory="XamlTaskFactory" AssemblyName="Microsoft.Build.Tasks.v4.0">
    <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
  </UsingTask>
  <Target Name="FooCompile" BeforeTargets="$(FOOBeforeTargets)" AfterTargets="$(FOOAfterTargets)" Condition="'@(FOO)' != ''" Outputs="%(FOO.Outputs)" Inputs="%(FOO.Identity);%(FOO.AdditionalDependencies);$(MSBuildProjectFile)" DependsOnTargets="_SelectedFiles">
    <Message Importance="High" Text="@(FOO)" />
    <FOO Condition="'@(FOO)' != '' and '%(FOO.ExcludedFromBuild)' != 'true'"
         CommandLineTemplate="%(FOO.CommandLineTemplate)"
         OutputFileName="%(FOO.OutputFileName)"
         Inputs="%(FOO.Identity)" />
  </Target>
</Project>

Когда я компилирую свой проект, он успешно идентифицирует и компилирует мои файлы foo:

1>FooCompile:
1>  apa.foo
1>FooCompile:
1>  banan.foo
1>ClCompile:
1>  test.cpp
1>  main.cpp

Мой вопрос: почему он печатает «FooCompile:» один раз для каждого файла, а ClCompile - нет?Есть ли способ изменить это?

Если я изменю файл cpp и соберусь, я также получу этот вывод один раз для каждого файла, которого я хочу избежать:

1>FooCompile:
1>Skipping target "FooCompile" because all output files are up-to-date with respect to the input files.
1>FooCompile:
1>Skipping target "FooCompile" because all output files are up-to-date with respect to the input files.

1 Ответ

1 голос
/ 28 августа 2011

Цель FooCompile использует «целевое пакетирование», которое заставляет цель выполнять итерацию один раз для каждого элемента в массиве, указанном для атрибута Outputs,% (Foo). С другой стороны, цель ClCompile работает с использованием всего массива элементов @ (ClCompile).

Вы можете изменить многословность регистратора, чтобы избежать сообщений, укажите / v: минимальный, но, конечно, вы также можете отфильтровывать другую информацию.

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