[gelöst] C++ Projekte mit MSBuild kompilieren?



  • Hallo zusammen,

    eine Frage: Ist es möglich VC++ Projekte die mit VS2005 erstellt worden sind mit MSBuild umzuwandeln?

    Wenn Ja:
    Was muss ich dabei beachten?
    Hat vielleicht jemand ein Beispiel zu einem *.proj-file?
    Kann ich irgendwie festlegen das ich zum Beispiel ein Projekt nur mit folgenden Konfigurationen umwandeln möchte:

    win32: Release & Debug
    x64: nur Release

    Wenn Nein:
    Gibt es ein Programm welches VC++ Projekte über die Kommandozeile umwandelt und dabei ähnlich exakte Möglichkeiten bietet wie die XML-Dateien (*.proj) für MSBuild?

    Vielen Dank an euch,
    Julian



  • Was soll den "umwandeln" heißen? Meinst du damit kompilieren? Drück dich bitte klar aus, damit man dir weiter helfen kann.



  • Hi,

    mit umwandeln meine ich eine Debug & eine Releaseversion zu erstellen. Also im Prinzip möchte ich ein komplettes Rebuild der versch. Projekte starten.

    Also Ja: Umwandeln = Kompilieren = Release && Debug

    Tschuldige für die falsche Wortwahl.

    LG, Julian



  • Das einfachste ist, Du legst eine proj-Datei an mit Folgendem Inhalt:

    <Project 
      DefaultTargets="Rebuild" 
      ToolsVersion="2.0" 
      Verbosity="detailed"
      xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>
        <Project Include="Project1Directory\Project1.vcproj" />
        <Project Include="Project2Directory\Project2.vcproj" />
        <!-- usw. -->
      </ItemGroup>
      <Target Name="Rebuild">
        <VCBuild 
          Projects="@(Project)"
          Configuration="Debug|Win32"
          Rebuild="true"
          ContinueOnError="false"
        />
        <VCBuild 
          Projects="@(Project)"
          Configuration="Release|Win32"
          Rebuild="true"
          ContinueOnError="false"
        />
      </Target>
      <Target Name="Build">
        <VCBuild 
          Projects="@(Project)"
          Configuration="Debug|Win32"
          ContinueOnError="false"
        />
        <VCBuild 
          Projects="@(Project)"
          Configuration="Release|Win32"
          ContinueOnError="false"
        />
      </Target>
      <Target Name="Clean">
        <VCBuild 
          Projects="@(Project)"
          Configuration="Debug|Win32"
          Clean="true"
          ContinueOnError="false"
        />
        <VCBuild 
          Projects="@(Project)"
          Configuration="Release|Win32"
          Clean="true"
          ContinueOnError="false"
        />
      </Target>
    </Project>
    

    Und dann einfach in dem Verzeichnis so starten:

    msbuild
    

    oder so:

    msbuild /t:Clean
    


  • Hallo Jochen,

    vielen vielen vielen Dank! Es funktioniert super, ich bin wirklich unglaublich happy. Das habe ich die ganze Zeit gesucht, genau das!

    Sag mal hast du vielleicht irgendwo eine Page od. Tutorials bzw. Bücher die du mir zum Thema MSBuild, VCBuild empfehlen kannst?

    Ich habe jetzt noch eine Frage und zwar möchte ich den Aufruf von MSBuild aus einem Skript starten das mich bei Fehlern benachrichtigt (BLAT), dazu brauche ich einen Returnwert. Liefert MSBuild bei einem Error einen Returnwert?

    LG, Julian.



  • msbuild liefert 0, wennn erfolgreich und 1 bei Fehler.



  • Hallo Jochen,

    okay Danke.

    Wenn ich jetzt also mehrere Projekte kompiliere, in verschiedenen Konfigurationen wie in deinem Skript oben und ein Projekt mit Konfiguration abbricht, bekomme ich also einen Returnwert 1.

    Bsp.:

    proj1.vcproj (Release|x64)    - DONE!
    proj1.vcproj (Debug|x64)      - FAILURE!
    proj1.vcproj (Release|win32)  - DONE!
    proj1.vcproj (Debug|win32)    - DONE!
    
    Build succeeded.
        0 Warning(s)
        1 Error(s)
    

    Bekomme ich dann einen Returnwert 1 oder 0, da ja 3 Projekte erfolgreich kompiliert wurden?
    Und wie sieht es mit Fehlerhandling bei MSBuild im allgemeinen aus? Kann ich zum Beispiel feststellen welches Projekt mit welcher Konfiguration abgebrochen ist?
    Ist es möglich Abhängigkeiten zu setzen, also das zum Beispiel die Release|x64 nur erstellt wird, wenn die Debug|x64 erfolgreich war?

    Vielen Dank, ich hoffe ich frage nicht zu viel 🙂

    LG, Julian



  • Du kannst fast alles machen! U.a. mit "DependsOnTargets"... und "ContinueOnError"... "OnError"...

    Siehe:
    MSBuild Reference
    http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx

    Target Element (MSBuild)
    http://msdn.microsoft.com/en-us/library/t50z2hka.aspx

    OnError Element (MSBuild)
    http://msdn.microsoft.com/en-us/library/ms164285.aspx

    Übersicht über MSBuild
    http://msdn.microsoft.com/de-de/library/ms171452.aspx

    Siehe auch:
    Inside the Microsoft® Build Engine: Using MSBuild and Team Foundation Build (PRO-Developer) (Taschenbuch)
    Inside the Microsoft Build Engine | ISBN: 0735626286



  • Hallo Jochen,

    erstmal vielen Dank nochmal für deine Hilfe. Hat mich wirklich gut weitergebracht. Wenn alles gut läuft habe ich bald alles unter meinen Wunschbedingungen.
    Die Links zu MS kannte ich schon, trotzdem vielen Dank dafür. Ich finde allerdings das sie mit einem Beispiel, wie deinem oben, nun besser verständlich sind.

    Das Buch gibt es auch als GoogleBook, es fehlen natürlich ein paar Seiten wie immer, allerdings sind interessante Sachen trotzdem vorhanden und nachvollziehbar. Ich werde es mir trotzdem zulegen, manchmal sind Offline-Tutorials dann doch schöner 😉

    Liebe Grüße, Julian.




Anmelden zum Antworten