ソースセットモジュール
このモジュールは、単一のファイルセットに対して多くのターゲットをビルドするためのサポートを提供します。各ターゲットに含めるファイルの選択は、辞書または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_file
、custom_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()
適用された構成に対応する依存関係を返します。
**戻り値**: 依存オブジェクトのリスト
検索の結果は次のとおりです。