看起来您需要进行一些更改。
首先,由于您在 Windows 上,SCons 将默认配置 Visual Studio 工具(如果可用),
见:SCons/Tool/init.py
c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ]
所以首先让我们解决这个问题:
env = Environment(tools=[])
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe'
env.Tool('cc')
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe'
env.Tool('link')
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction')
这可能还不够,因为 SCons 不知道 .csx 和 .cn 文件后缀。所以让我们解决这个问题:
env = Environment(tools=[])
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe'
env.Tool('cc')
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe'
env.Tool('link')
env['PROGSUFFIX'] = '.csx'
# Note we removed that from the output for program as it should automatically add it.
env.Program('pi', 'pi.cn', CFLAGS='-lcn_reduction')
接下来你需要告诉 SCons .cn 可以生成目标文件。
import SCons.Tool
import SCons.Default
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
my_suffix = '.cn'
static_obj.add_action(my_suffix, SCons.Defaults.CAction)
#shared_obj.add_action(my_suffix, SCons.Defaults.ShCAction)
static_obj.add_emitter(my_suffix, SCons.Defaults.StaticObjectEmitter)
#shared_obj.add_emitter(my_suffix, SCons.Defaults.SharedObjectEmitter)
那应该解决这个问题。
让我们把它们放在一起:
env = Environment(tools=[])
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe'
env.Tool('cc')
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe'
env.Tool('link')
env['PROGSUFFIX'] = '.csx'
# Add .cn suffix as able to create objects.
import SCons.Tool
import SCons.Default
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
my_suffix = '.cn'
static_obj.add_action(my_suffix, SCons.Defaults.CAction)
#shared_obj.add_action(my_suffix, SCons.Defaults.ShCAction)
static_obj.add_emitter(my_suffix, SCons.Defaults.StaticObjectEmitter)
#shared_obj.add_emitter(my_suffix, SCons.Defaults.SharedObjectEmitter)
# Note we removed that from the output for program as it should automatically add it.
env.Program('pi', 'pi.cn', CFLAGS='-lcn_reduction')
现在,我无法访问您的编译器工具链,所以我没有尝试上述方法,但我相信它应该最能帮助您,如果不是全部的话。