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