none
Verweise auf bestimmte Projekt-Konfigurationen RRS feed

  • Frage

  • Hallo!

    Ich bin dabei mein build-system etwas umzugestalten und nun hab ich ne Frage: Gibt es eine Möglichkeit bei Projektverweisen anzugeben, auf welche Build-Konfiguration verwiesen wird und kann man einen Verweis bestimmte Properties (zB zusätzliche Präprozessor-Defines, die die referrierte Konfiguration reflektieren) setzen lassen?

    Wenn man zB eine Library als Projekt hat und das Projekt Konfigurationen für Debug und Release Ausführung als statische und als dynamische Bibliothek enthält, kann man dann irgendwie im verweis angeben (lassen), ob jetzt die statische oder dynamische Fassung in Debug oder Release Version eingebunden werden soll und in den verweisenden Projekten entsprechende Defines und include-Suchpfade setzen lassen?

    Donnerstag, 2. Mai 2013 17:01

Alle Antworten

  • Hallo Heiko,

    Willst Du  dass mit einem Build Script machen?

    Gruss,

    Ionut

    Freitag, 3. Mai 2013 15:03
    Moderator
  • Ich weiss leider nicht genau, was Du mit einem Buildskript jetzt meinst... Ich werde mal den Stand der Dinge Schildern:

    Ich hab nen Haufen Library-Projekte, die wie oben erwähnt in verschiedenen Fassungen vorliegen. Zu jedem solchen Projekt hab ich eine .props-Datei, die (bisher per Hand) in importierende Projekte via Import-Anweisung eingefügt wird. Die .props-Datei setzt dann alle möglichen defines, include-pfade und dependencies auf Basis von vom importierenden Projekt gesetzten Properties. Das heisst: typischerweise schreibe ich bisher für jedes Projekt, dass die libraries verwenden soll eine eigene .props-datei, welches die properties, die von der library-.props abgefragt werden setzt, und die library-.props importiert. Das sieht dann etwa so aus:

    // .props vom importierenden Projekt (via Import in die .vcxproj eigebunden)
    
    <Project ...>
       <Library_X_Linkage>static</Library_X_Linkage>
       <Library_X_Config>debug</Library_X_Linkage>
    </Project>
    
    <Import Project=<Pfad zur library-.props>
    
    
    // Die library-.props sieht dann zB so aus
    <Project>
       <PropertyGroup Condition="'$(Library_X_Linkage')==static">
    
        <AdditionalDependencies>...</>
        <PreprocessorDefinitions>...</>
       </PropertyGroup>
    </Project>
    

    Das funktioniert so weit, es ist aber umständlich zu warten, weil man andauernd in die library-.props reinschauen muss, welche properties wie gesetzt werden müssen und die verweise auf die library-.props per hand hinzugefügt werden müssen. Außerdem wird man tendenziell mit build-warnungen überschüttet, wenn solche .props mehrfach eingebunden sind aufgrund der verweis-struktur unter den libraries. Die referrierten Libraries waren bisher nicht in die importierende ProjektMappe(solution) eingebunden, in dem Sinne, dass sie da in der Projekt-liste erschienen.

    Weil das beim Debuggen mitunter hinderlich ist, weil man dann immer eine neue VS-session aufmachen muss, um nach Änderungen die geänderte library neu zu erstellen, versuche ich das jetzt so weit wie möglich in der GUI einzurichten, indem ich die referierrten Projekte in die Projektmappe aufnehme. Jetzt kann man die zwar bei Änderung einfach von da aus neu erstellen, aber die Auswahl der Konfiguration ist jetzt verdoppelt: Einmal die vom Konfigurations-Manager (das hab ich inzwischen gefunden) und die Properties, die in der import-.props stehen. Ich versuche die import-.props so weit wie möglich unnötig zu machen. Dazu fallen mir prinzipiell zwei Möglichkeiten ein, die aber leider beide, soweit ich weiss, so nicht möglich sind: Das Projekt, auf das verwiesen wird, exportiert die nötigen Settings für die jeweilige Konfiguration an das importierende Projekt (das wäre sehr elegant), oder die import-.props müsste abfragen können, mit welcher Konfiguration die einzeilnen Bibilotheken im Konfigurations-Manager ausgewählt sind - diese Information steht aber, soweit ich sehe in der .sln-datei und nicht in der .vcxproj.

    Freitag, 3. Mai 2013 15:47