我必須使用兩步編譯來編譯目標。圖書館編譯器不能在SCons中的修改文件上觸發
第一步:.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構建器?
我試過這個,我仍然得到相同的行爲。不知何故庫構建器不鏈接到我的對象構建器。 –
你可以發佈一個最簡單的工作示例嗎? –