16

ProblemKrok po kroku, jak dodać niestandardowy krok kompilacji dla każdego pliku danego typu w Visual Studio 2010?

  1. Mam kilka plików niestandardowych w Visual Studio 2010 projektu.
  2. Muszę uruchomić narzędzie w przypadku tych niestandardowych plików, gdy ulegną one zmianie.
  3. Narzędzie generuje pliki .h zawarte w istniejących plikach .cpp.
  4. Chciałbym, aby narzędzie działało jako część procesu kompilacji.
  5. Musi działać z poziomu wizualnego studia, ale najlepiej może również działać jako część procesu msbuild.

Istniejące sub-standardowych rozwiązań

Na każdego pliku, za każdym razem kiedy go dodać, mogę przejść do ustawień plików należy ustawić typ elementu zwyczaj budowania Tool, a następnie w zwyczaj budowania Dialog narzędzi, ustaw parametry wiersza poleceń, ustaw (wydrukowane na stałe) wyjścia i ustaw dodatkowe zależności (na sztywno).

Oczywiście, jest to kiepskie rozwiązanie, ponieważ jest to nietrywialna i podatna na błędy praca za każdym razem, gdy dodajesz nowy plik typu niestandardowego.

Pożądana rozwiązanie

skonfigurować visual studio, które z jakiegoś pliku przedłużki .foo, uruchamia narzędzie bar.exe, gdy zmienia plików .foo, zanim kompiluje kod CPP.

Czego próbowano

Na tej podstawie: http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx próbowałem założyć .targets i .xml plik. Nie mogę jednak dowiedzieć się, jak utworzyć nowy typ przedmiotu, który pojawi się w studiu graficznym, ani też nie wymyślę, jak sprawić, by był on magicznie stosowany do każdego pliku typu .foo. Ponadto, nie zorientowałem się, w którym miejscu tego linku do wszystkiego, co opisuje akt wywoływania mojego narzędzia bar.exe.

Podjęto próbę przeszukiwania wszystkich plików xml/celów visual studio w celu śledzenia istniejących typów elementów i określenia, w jaki sposób są one tłumaczone na rzeczywiste działania kompilacji. Zawsze kończy się na ścianie ItemType, gdzie jest paczka opisana w ProjectItemsSchema, ale nie mogę znaleźć, gdzie są one zaimplementowane, ani jak mogę je zaimplementować samodzielnie.

Dokumentacja MSDN była kompletną porażką i myślę, że przeczytałem każdą potencjalnie powiązaną stronę dziesięć razy, bezskutecznie.

w visual studio 2008, miałem tego rodzaju rzeczy pracy z .rules pliku, który wyglądał tak:

<?xml version="1.0" encoding="utf-8"?> 
<VisualStudioToolFile 
Name="Foo Build Rules" 
Version="8.00" 
> 
<Rules> 
    <CustomBuildRule 
     Name="FooBuild" 
     DisplayName="FooGen" 
     CommandLine="..\..\tools\FooGen.exe [inputs]" 
     Outputs="$(InputName).h" 
     AdditionalDependencies="*.foo" 
     FileExtensions="*.foo" 
     ExecutionDescription="Generating Foos..." 
     > 
     <Properties> 
     </Properties> 
    </CustomBuildRule> 
</Rules> 
</VisualStudioToolFile> 

Jednak funkcja ta została zaniechana w 2010 roku, i byłem w stanie zorientować się, jak powielić to z nowym systemem.

Pomoc?

+0

Sprawdziłeś to? http://msdn.microsoft.com/en-us/library/xfsbz6cw(v=vs.100).aspx – hege

+0

Oto, czego używałem w 2008 roku. Nie działają już w 2008 roku. –

+0

Przypuszczam, że musiałeś przeczytać ten też: http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-custom-build-rule.aspx. To, co wpadło mi w oczy, to, że zgodnie z tym, potrzebujesz również pliku .props, może tego właśnie brakuje. Nie próbowałem tego jednak ... – hege

Odpowiedz

7

Zacznij od dodania niestandardowej grupy ItemGroup do pliku projektu.

jak poniżej:

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
     <Message>Copying readme...</Message> 
     <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
     <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
    </ItemGroup> 

Następny cel stworzenie niestandardowego i określić, gdzie w procesie budowania chcesz uruchomić swoje własne cele w procesie budowania.

Poniższe linki wyjaśniają bardziej szczegółowo i krok po kroku.

Mam nadzieję, że to pomoże.

Walk-through: Using MSBuild to Create a Visual C++ Project

How to: Add Custom Build Tools to MSBuild Projects

Note: W obecnej wersji IDE nie obsługuje tworzenia nowych reguł. Z tego powodu najłatwiejszym sposobem użycia pliku reguł z projektu utworzonego przy użyciu wcześniejszej wersji programu Visual C++ jest migracja projektu do bieżącej wersji.

+0

Dlaczego głosowanie w dół? – SoftwareCarpenter

+0

W tym przykładzie krok 'CustomBuild' dotyczy tylko jednego pliku,' faq.txt'. OP chciał wykonać krok "CustomBuild", który działa na wielu plikach, takich jak '* .foo'. –

+1

Aby kontynuować, 'CustomBuild' może być również używany z symbolami wieloznacznymi, więc użycie' 'działa zgodnie z oczekiwaniami. Dziękuję Ci. –