源集模块
此模块提供了对针对单个文件集构建多个目标的支持;将哪些文件包含在每个目标中取决于字典或 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, ...)
将一个或多个源集添加到另一个源集中。
对于参数中列出的每个源集,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()
返回与应用的配置相对应的依赖项。
返回值:依赖项对象列表
搜索结果为