Source-Set-Modul
Dieses Modul bietet Unterstützung für das Erstellen vieler Ziele gegen eine einzelne Gruppe von Dateien. Die Wahl, welche Dateien in jedes Ziel aufgenommen werden sollen, hängt vom Inhalt eines Wörterbuchs oder eines configuration_data-Objekts ab. Das Modul kann mit
ssmod = import('sourceset')
geladen werden. Ein einfaches Beispiel für die Verwendung des Moduls sieht wie folgt aus
ss = ssmod.source_set()
# Include main.c unconditionally
ss.add(files('main.c'))
# Include a.c if configuration key FEATURE1 is true
ss.add(when: 'FEATURE1', if_true: files('a.c'))
# Include zlib.c if the zlib dependency was found, and link zlib
# in the executable
ss.add(when: zlib, if_true: files('zlib.c'))
# many more rules here...
ssconfig = ss.apply(config)
executable('exe', sources: ssconfig.sources(),
dependencies: ssconfig.dependencies())
und wäre äquivalent zu
sources = files('main.c')
dependencies = []
if config['FEATURE1'] then
sources += [files('a.c')]
endif
if zlib.found() then
sources += [files('zlib.c')]
dependencies += [zlib]
endif
# many more "if"s here...
executable('exe', sources: sources, dependencies: dependencies)
Source-Sets können mit einem einzigen Aufruf der apply-Methode verwendet werden, ähnlich dem obigen Beispiel. Das Modul ist jedoch besonders nützlich, wenn mehrere ausführbare Dateien generiert werden, indem dieselben Regeln auf viele verschiedene Konfigurationen angewendet werden.
Hinzugefügt 0.51.0
Funktionen
source_set()
ssmod.source_set()
Erstellt und gibt ein neues Source-Set-Objekt zurück.
Rückgabe: ein Source-Set
source_set-Objekt
Das source_set-Objekt bietet Methoden zum Hinzufügen von Dateien zu einem Source-Set und zum Abfragen desselben. Das Source-Set wird nach dem Aufruf jeder Methode außer add unveränderlich.
Methoden
add()
source_set.add([when: varnames_and_deps],
[if_true: sources_and_deps],
[if_false: list_of_alt_sources])
source_set.add(sources_and_deps)
Fügt eine Regel zu einem Source-Set hinzu. Eine Regel bestimmt die Bedingungen, unter denen bestimmte Quelldateien oder Abhängigkeitsobjekte in eine Build-Konfiguration aufgenommen werden. Alle Quelldateien müssen im Quellbaum vorhanden sein oder können im Build-Baum über configure_file, custom_target oder generator erstellt werden.
varnames_and_deps ist eine Liste von Bedingungen für die Regel, die entweder Zeichenfolgen oder Abhängigkeitsobjekte sein können (ein Abhängigkeitsobjekt ist alles, das eine found()-Methode hat). Wenn alle Zeichenfolgen wahr ausgewertet werden und alle Abhängigkeiten gefunden werden, wird die Regel als wahr ausgewertet; apply() nimmt dann den Inhalt des if_true-Schlüsselwortarguments in sein Ergebnis auf. Andernfalls, d. h. wenn eine der Zeichenfolgen in den Positionsargumenten als falsch ausgewertet wird oder eine Abhängigkeit nicht gefunden wird, verwendet apply() stattdessen den Inhalt des if_false-Schlüsselwortarguments.
Abhängigkeiten können auch in sources_and_deps erscheinen. In diesem Fall wird eine fehlende Abhängigkeit einfach ignoriert und die Regel *nicht* deaktivieren, ähnlich wie das dependencies-Schlüsselwortargument bei Build-Zielen funktioniert.
Hinweis: Es ist im Allgemeinen besser, die Vermischung von Source-Sets und Disablern zu vermeiden. Dies liegt daran, dass Disabler dazu führen, dass die Regel vollständig verworfen wird und die list_of_alt_sources nicht mehr berücksichtigt wird.
add_all()
source_set.add_all(when: varnames_and_deps,
if_true: [source_set1, source_set2, ...])
source_set.add_all(source_set1, source_set2, ...)
Fügt ein oder mehrere Source-Sets zu einem anderen hinzu.
Für jedes in den Argumenten aufgeführte Source-Set werden bei apply() nur dann deren Regeln berücksichtigt, wenn die Bedingungen in varnames_and_deps positiv ausgewertet werden. Zum Beispiel das Folgende
sources_b = ssmod.source_set()
sources_b.add(when: 'HAVE_A', if_true: 'file.c')
sources = ssmod.source_set()
sources.add_all(when: 'HAVE_B', if_true: sources_b)
ist äquivalent zu
sources = ssmod.source_set()
sources.add(when: ['HAVE_A', 'HAVE_B'], if_true: 'file.c')
all_sources()
list source_set.all_sources(...)
Gibt eine Liste aller Quellen zurück, die mithilfe von add (einschließlich verschachtelter Source-Sets) in das Source-Set platziert wurden und keine nicht gefundene Abhängigkeit haben. Wenn eine Regel eine nicht gefundene Abhängigkeit hat, werden nur die if_false-Quellen (falls vorhanden) einbezogen.
Rückgabe: eine Liste von Datei-Objekten
all_dependencies() (seit 0.52.0)
list source_set.all_dependencies(...)
Gibt eine Liste aller Abhängigkeiten zurück, die mithilfe von add (einschließlich verschachtelter Source-Sets) in das Source-Set platziert wurden und gefunden wurden.
Rückgabe: eine Liste von Abhängigkeitsobjekten
apply()
source_files source_set.apply(conf_data[, strict: false])
Gleicht das Source-Set mit einem Wörterbuch oder einem configuration_data-Objekt ab und gibt ein Source-Konfiguration-Objekt zurück. Ein Source-Konfiguration-Objekt ermöglicht es Ihnen, die Quellen und Abhängigkeiten für eine bestimmte Konfiguration abzurufen.
Standardmäßig müssen alle in den Regeln angegebenen Variablen in conf_data vorhanden sein. In einigen Fällen ist jedoch die Konvention, dass false-Konfigurationssymbole in conf_data fehlen. Dies ist beispielsweise der Fall, wenn die Konfiguration aus einer Kconfig-Datei geladen wurde. In diesem Fall können Sie das Schlüsselwortargument strict: false angeben, das fehlende Variablen als falsch behandelt.
Rückgabe: eine Source-Konfiguration
source_configuration-Objekt
Das source_configuration-Objekt bietet Methoden zum Abfragen des Ergebnisses einer apply-Operation auf ein Source-Set.
Methoden
sources()
source_config.sources()
Gibt die Quellcodedateien zurück, die der angewendeten Konfiguration entsprechen.
Rückgabe: eine Liste von Datei-Objekten
dependencies()
source_config.dependencies()
Gibt die Abhängigkeiten zurück, die der angewendeten Konfiguration entsprechen.
Rückgabe: eine Liste von Abhängigkeitsobjekten
Die Ergebnisse der Suche sind