小编rdo*_*ell的帖子

SCons对编译时生成的文件的依赖性

我正在尝试设置SCons以遵循在构建期间自动生成的文件的依赖关系,并使用多线程构建正常工作.

我正在构建的项目是一个CIM提供程序,包括定义数据结构的MOF文件,来自MOF文件的自动生成的源文件和头文件,以及引用自动生成文件的手写源文件和头文件.为了使构建成功,自动生成步骤必须在编译任何手写文件之前运行完成,否则手写文件所依赖的标题将不存在并且将失败.自动生成步骤创建的.cpp文件也必须添加到源列表中并在最终构建中进行编译.

当运行单线程构建时,一切正常,因为自动生成步骤总是在编译步骤之前完成,因此生成的头文件就位.但是,在运行构建多线程时,它会尝试在自动生成步骤完成之前编译手写文件,并且构建失败.我已经指定了一个显式依赖项,但SCons没有遵循它.

这是我的SConscript文件的相关部分,我从cim_targets []中删除了单个文件名,因为列表非常长,但总而言之,cim_targets []是自动生成步骤的目标输出文件列表,provider_sources []是返回的autogen步骤完成后的源列表,sources []是手写源文件列表,GenProvider()是外部定义的Command构建器,用于执行自动生成步骤,SharedLibrary()是外部定义的构建器,它执行听起来像,使用带有一些扩展名的SCons库构建器

# Define directory paths for the CIM schema
cim_dir = 'cim-schema-2.26.0'

var_smis_dir   = Dir('.').abspath # src/lib/XXX in variant

cim_sources = [
    Glob(os.path.join(cim_dir, '*qualifiers*.mof')),
    Glob(os.path.join(cim_dir, 'Core')     + '/CIM_*.mof'),
    Glob(os.path.join(cim_dir, 'Device')   + '/CIM_*.mof'),
    Glob(os.path.join(cim_dir, 'Event')    + '/CIM_*.mof'),
    Glob(os.path.join(cim_dir, 'XXXXXX')   + '/XXX_*.mof'),
    Glob(os.path.join(cim_dir, 'Interop')  + '/CIM_*.mof'),
    Glob(os.path.join(cim_dir, 'Physical') + '/CIM_*.mof'),
    Glob(os.path.join(cim_dir, 'System')   + '/CIM_*.mof'),
]

cim_sources_flat = []
for cim in cim_sources:
    for src in cim:
        cim_sources_flat.append(src)

cim_targets = [
    ......
]

sources = [ …
Run Code Online (Sandbox Code Playgroud)

dependencies code-generation scons

10
推荐指数
1
解决办法
3154
查看次数

标签 统计

code-generation ×1

dependencies ×1

scons ×1