我正在为使用名为"Cn"的语言的数字信号处理卡开发一些代码 - 与C非常相似,但有一些重要的区别,例如引入"单声道"和"poly"变量。
编译器称为"cscn",位于"C:\Program Files (x86)\clearspeed\bin\cscn.exe"(它是一个Windows主机系统)。我正在研究使用 SCons 进行编译和依赖项生成,但我似乎无法让 SCons 识别/使用 cscn 编译器。一个非常简单的编译命令应该是
cscn pi.cn -lcn_reduction -o pi.csx
我最近一次尝试使用配置脚本是
env = Environment()
env.Replace(CC = ['C:Program Files (x86)clearspeedbincscn.exe'])
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction')
但是,我得到的是一条错误消息,告诉我"找不到Visual Studio编译器版本",并且我必须为我的构建指定至少一个.exe目标。 cscn 不生成.exe文件,而是生成 .csx 文件。我希望我可以替换它尝试与 env 一起使用的编译器。replace() 命令,但显然不是。
有没有办法做到这一点?
请尝试
env = Environment(CC = 'C:/Program Files (x86)/clearspeed/bin/cscn.exe')
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction')
相反。简单Environment()
调用默认为
env = Environment(tools=['default'])
这意味着SCons首先尝试找到其工具,例如gcc
或g++
。如果事后更换他们的路径,那就太晚了......由于找不到编译器,因此不会为当前环境初始化相应的Builder
(如 Program
和 Library
)。请注意,您可能需要替换其他几个变量(AR
和LINK
想到的变量)才能使整个工具链正常运行。另请参阅如何将交叉编译器与 Scons 一起使用? 。
如果您继续为此苦苦挣扎,您可能想在scons-users@scons.org
访问我们的用户邮件列表(见 http://scons.org/lists.html),并在那里提出您的进一步问题。
看起来您需要进行一些更改。首先,由于您在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)clearspeedbincscn.exe'
env.Tool('cc')
env['LINK'] = 'C:Program Files (x86)clearspeedbincscn.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)clearspeedbincscn.exe'
env.Tool('cc')
env['LINK'] = 'C:Program Files (x86)clearspeedbincscn.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)clearspeedbincscn.exe'
env.Tool('cc')
env['LINK'] = 'C:Program Files (x86)clearspeedbincscn.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')
现在,我无法访问您的编译器工具链,所以我没有尝试上述方法,但我相信它应该能让您获得大部分,如果不是一路走来的话。