【发布时间】:2016-02-01 11:59:02
【问题描述】:
我想使用 SCons 在以下步骤中编译文件:
.c -> .asm(汇编文件) -> .o
我试图为此定义不同的构建器。
我设法做了类似的事情:.asm -> .o 和 .c -> .o
我不知道如何让 SCons 知道从 .c 文件生成的 .asm 文件,然后使用对象生成器。
是否有可能为此使用当前的 SCons 实现?
编辑:这是我尝试过的:
-> 定义两个构建器:构建器 1 (c_to_asm) 旨在执行 .c -> .asm 步骤 Builder 2 (asm_to_o) 旨在执行 .asm -> .o 。在为我的 SConscript 中定义的所有文件执行这两个构建器之后,我希望程序构建器创建最终的可执行文件。
SCons.Tool.createProgBuilder(env)
c_to_asm = SCons.Builder.Builder(action = {},
emitter = {},
prefix = '',
suffix = '.asm',
src_builder = '',
source_scanner = '',
single_source = 1)
c_to_asm_action = SCons.Action.Action('c to asm command line', 'Executing .c to .asm builder')
c_to_asm.add_action('.c', c_to_asm_action)
asm_to_o = SCons.Builder.Builder(action = {},
emitter = {},
prefix = '',
suffix = '.o',
src_builder = ['CTOASM'],
source_scanner = '',
single_source = 1)
asm_to_o_action = SCons.Action.Action('asm to o command line', 'Executing .asm to .o builder...')
asm_to_o.add_action('.asm', asm_to_o_action)
env['BUILDERS']['CTOASM'] = c_to_asm
env['BUILDERS']['Object'] = asm_to_o
我看到每个构建器的执行字符串,但没有执行任何命令。
我不知道如何确定这些构建器执行操作的顺序以及如何触发这些构建器。
【问题讨论】:
-
请提供更多信息,了解您到目前为止所做的具体尝试。您的 Builders 看起来如何,您如何初始化和调用它们?您收到的错误消息究竟是什么,或者您目前正在处理哪个细节问题? (例如:您的文件是否已构建,但依赖项不正确,以至于“干净”运行会留下文件?)