【发布时间】:2016-03-15 13:53:45
【问题描述】:
我必须使用两步编译来构建目标。
第一步:.c -> .asm 第二步:.asm -> .o
我正在从一些 .o 文件创建一个库。
我的实现如下:
第一步:
c_to_asm_builder = SCons.Builder.Builder(action = SCons.Defaults.CAction,
emitter = {},
suffix = '.asm',
src_suffix = ['.c','.cpp'],
src_builder = '',
source_scanner = SCons.Tool.CScanner
)
env['Builders']['CTOASM'] = c_to_asm_builder
第二步:
suffixesASM = ['.asm', '.s']
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
for suffix in suffixesASM:
static_obj.add_action(suffix, SCons.Defaults.ASAction)
然后我如下调用建设者:
env.CTOASM(['file1.c', 'file2.c', 'file3.c'], CFLAGS = '-flag')
env.Object(['file1.asm', 'file2.asm', 'file3.asm'], ASFLAGS = '-flag')
我正在创建一个这样的库:
env.Library('name', ['file1.o', 'file2.o'])
编译时一切正常。
问题出现在以下情况:
我更改了 file1.c 的内容。我希望 file1.c 能够通过这些步骤:
file1.c -> file1.asm -> file1.o 然后 name.a 要重新创建的库。
会发生什么:
只有 c_to_asm_builder 会被更改重新触发(file1.c -> file1.asm)。对象构建器 (file1.asm -> file1.o) 不会重新触发,库构建器和程序构建器也不会重新触发。
我不知道我错过了什么。我知道对于我在另一个项目中配置的单步编译,对象构建器和库构建器以某种方式相互了解。
如何让库和程序构建器了解对象和 CTOASM 构建器?
【问题讨论】:
标签: scons