我正在尝试使用SCons准备一个构建系统。我想在代码生成阶段使用
默认情况下,SCons配置没有明确的步骤来生成汇编文件(.s)。
为了解决这个问题,我创建了自己的
clang
,而在其他所有方面使用自定义编译器工具链。默认情况下,SCons配置没有明确的步骤来生成汇编文件(.s)。
为了解决这个问题,我创建了自己的
Builder
,用于生成汇编文件。code_generator = Builder(action = '$CC -$LOTS_OF_FLAGS -S $SOURCE -o $TARGET', suffix = '.s')
env.Append(BUILDERS = {'CodeGenerator':code_generator})
我随后将这个Builder
用于我的源文件,并将结果的NodeList
传递给Program
。
for file in Glob('*.c'):
sources += env.CodeGenerator(file)
env.Program('say_hello', sources)
当我不修改任何变量时,这个方法运行良好。我使用gcc
得到可执行文件。
然而,当我尝试替换适当的变量以便SCons使用自定义工具链(使用env.Replace(CC='clang')...
),只有一个汇编文件被生成。我的自定义Builder
没有在其他任何文件上调用,SCons尝试链接只有一个目标文件(显然失败了)。
- 如何让SCons在所有文件上运行构建器并将这些目标文件包含到链接中?
- 是否有更好的方法来完成我正在尝试做的事情?我刚开始使用SCons。