Ich habe eine bestehende C-Bibliothek, die mit Scons gebaut wurde (die Bibliothek hat ihre eigenen SConscript). Dieser Code enthält jetzt zwei Variationen, die von #ifdef
s gesteuert werden. Wie sage ich Scons, um zwei Varianten dieser Bibliothek zu erstellen, die Seite von Seite leben können (so können Anwendungen gegen die entsprechende Variation verknüpfen)?Erstellen von Bibliotheksvarianten mit Scons
Konzeptionell, es ist so etwas wie dieses:
driver_sources = [ ... ]
env.Library('drivers', driver_sources)
env.Library('drivers_withflag', driver_sources,
CPPDEFINES += ['FLAG'])
SCons (verständlicherweise) nicht wie die gleiche Quellenliste mit für verschiedene Ausgänge mit unterschiedlichen Umgebungen, da die Zwischenobjektnamen Konflikt.
Ich bin nicht sicher, ob dieses Problem nähern, indem irgendwie einen neuen Builder für drivers_withflag
Objekte stammen, oder ob ich meine Bibliothek SConscript zweimal mit einigen Parametern die #defines
angeben umfasse (und ich konnte jede Variante setzen in einem eigenen Build-Verzeichnis). Irgendein Rat?
Danke für die Antwort Tom. Leider funktioniert es nicht für mich. 'driver_sources' ist eine Liste von Dateien, also beschwert sich scons mit Ihrer Lösung," mehr als eine Quelle für den Builder für einzelne Quelle angegeben. " Der Versuch, die Bibliothek direkt aus den Quellen zu erstellen, führt zu dem Problem, das ich in der Frage erläutert habe, wo die Umgebungen bei der Erzeugung der gleichen Dateinamen von Zwischenobjektkonflikten stehen. –
Ah ich sehe, ja ich habe nur ein einfaches Beispiel mit einer Testdatei ausgearbeitet. Vielleicht gibt es eine Alternative zu Object? Oder vielleicht eine Art For-Schleife, um eine Liste von Objekten zu erstellen, dann können Sie vielleicht die Bibliothek aus dieser Liste von Objekten erstellen. – Tom
In der Tat kann ich ein Listenverständnis verwenden, um eine Liste von Objekten zu erstellen: 'd_wf = [env_flag.Object (src + '.flag', src) für src in driver_sources]'. Ich vergesse manchmal noch, dass ich in scons die volle Power von Python zur Verfügung habe. :) Wenn Sie Ihre Antwort bearbeiten, akzeptiere ich sie. –