ソースセットモジュール

このモジュールは、単一のファイルセットに対して多くのターゲットをビルドするためのサポートを提供します。各ターゲットに含めるファイルの選択は、辞書またはconfiguration_dataオブジェクトの内容によって異なります。このモジュールは、以下のようにロードできます。

ssmod = import('sourceset')

このモジュールの使用例を以下に示します。

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())

これは、以下と同等です。

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)

ソースセットは、上記の例のように、applyメソッドを一度呼び出すことで使用できますが、このモジュールは、多くの異なる構成に同じルールを適用して複数の実行可能ファイルが生成される場合に特に役立ちます。

0.51.0に追加

関数

source_set()

ssmod.source_set()

新しいソースセットオブジェクトを作成して返します。

**戻り値**: ソースセット

source_setオブジェクト

source_setオブジェクトは、ソースセットにファイルを追加し、それを照会するためのメソッドを提供します。add以外のメソッドが呼び出されると、ソースセットは不変になります。

メソッド

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)

ソースセットにルールを追加します。ルールは、ソースファイルまたは依存オブジェクトの一部がビルド構成に含まれる条件を決定します。すべてのソースファイルはソースツリーに存在するか、configure_filecustom_target、またはgeneratorを介してビルドツリーで作成する必要があります。

varnames_and_depsは、ルールの条件のリストであり、文字列または依存オブジェクトのいずれかです(依存オブジェクトはfound()メソッドを持つものすべてです)。すべての文字列がtrueと評価され、すべての依存関係が見つかった場合、ルールはtrueと評価されます。apply()は、if_trueキーワード引数の内容を結果に含めます。そうでない場合、つまり、位置引数の文字列のいずれかがfalseと評価されるか、依存関係が見つからない場合、apply()は代わりにif_falseキーワード引数の内容を使用します。

依存関係はsources_and_depsにも表示できます。この場合、見つからない依存関係は単に無視され、ルールは無効になりません。これは、ビルドターゲットのdependenciesキーワード引数の動作と同様です。

**注記**: 一般的に、ソースセットと無効化子を混ぜることは避けた方が良いでしょう。これは、無効化子によってルールが完全に削除され、list_of_alt_sourcesが考慮されなくなるためです。

add_all()

source_set.add_all(when: varnames_and_deps,
                   if_true: [source_set1, source_set2, ...])
source_set.add_all(source_set1, source_set2, ...)

1つ以上のソースセットを別のソースセットに追加します。

引数にリストされている各ソースセットについて、apply()は、varnames_and_depsの条件が肯定的に評価された場合のみ、そのルールを考慮します。例えば、以下の例は

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)

以下と同等です。

sources = ssmod.source_set()
sources.add(when: ['HAVE_A', 'HAVE_B'], if_true: 'file.c')

all_sources()

list source_set.all_sources(...)

add(ネストされたソースセットを含む)を使用してソースセットに配置され、見つからない依存関係を持たないすべてのソースのリストを返します。ルールに見つからない依存関係がある場合、if_falseソースのみ(存在する場合)が含まれます。

**戻り値**: ファイルオブジェクトのリスト

all_dependencies() (0.52.0以降)

list source_set.all_dependencies(...)

add(ネストされたソースセットを含む)を使用してソースセットに配置され、見つかったすべての依存関係のリストを返します。

**戻り値**: 依存関係のリスト

apply()

source_files source_set.apply(conf_data[, strict: false])

ソースセットを辞書またはconfiguration_dataオブジェクトと照合し、ソース構成オブジェクトを返します。ソース構成オブジェクトを使用すると、特定の構成のソースと依存関係を取得できます。

デフォルトでは、ルールで指定されたすべての変数はconf_dataに存在する必要があります。ただし、場合によっては、false構成記号がconf_dataに存在しないという規約があります。これは、たとえば、構成がKconfigファイルからロードされた場合です。その場合、strict: falseキーワード引数を指定できます。これにより、存在しない変数はfalseとして扱われます。

**戻り値**: ソース構成

source_configurationオブジェクト

source_configurationオブジェクトは、ソースセットに対するapply操作の結果を照会するためのメソッドを提供します。

メソッド

sources()

source_config.sources()

適用された構成に対応するソースファイルを返します。

**戻り値**: ファイルオブジェクトのリスト

dependencies()

source_config.dependencies()

適用された構成に対応する依存関係を返します。

**戻り値**: 依存オブジェクトのリスト

検索の結果は次のとおりです。