我目前正在设置SCons,以便将Windows作为主机操作系统进行交叉编译。我正在为交叉编译器构建一个自定义Environment
,但SCons坚持每次启动时都会查找Visual Studio(并打印一条警告,说明它找不到它,因为我没有安装它) 。我可以阻止它寻找我不知道会使用的标准工具吗?
答案 0 :(得分:6)
至少有两种方法可以做到这一点,第一种方法是最简单的,尝试创建指定编译器的环境,如下所示:
env = Environment(CC = '/path/to/the/compiler')
您可能还需要为链接器和其他工具添加路径。然后SCons不应该搜索它们。
另一种方法是使用配置文件参考中提到的tools
函数上的Environment()
参数为交叉编译器创建工具定义 SCons man page的一部分,其中提到了以下内容:
此外,还有一组特定的工具可用于初始化 环境可以指定为可选的关键字参数:
env = Environment(tools = ['msvc', 'lex'])
可以使用toolpath参数指定非内置工具:
env = Environment(tools = ['default', 'foo'], toolpath = ['tools'])
...
工具列表的各个元素本身也可能是 表单的两元素列表(toolname,kw_dict)。 SCons搜索 如上所述的工具名规范文件,并通过 kw_dict,必须是字典,作为关键字参数 工具的生成功能。 generate函数可以使用参数 通过设置环境来修改工具的行为 不同的方式或以其他方式改变其初始化。
工具/ my_tool.py:
def generate(env, **kw):
# Sets MY_TOOL to the value of keyword argument 'arg1' or 1.
env['MY_TOOL'] = kw.get('arg1', '1')
def exists(env):
return 1
SConstruct:
env = Environment(tools = ['default', ('my_tool', {'arg1': 'abc'})],
toolpath=['tools'])
答案 1 :(得分:1)
您可以取消此类警告
env.SetOption('warn', 'no-visual-c-missing')
例如,为ARM Cortex-M微控制器进行交叉编译我就是这样做的
cross = 'arm-none-eabi-'
toolchain = {
'CC': cross + 'gcc',
'CXX': cross + 'g++',
'AR': cross + 'ar',
'AS': cross + 'gcc',
'OBJCOPY': cross + 'objcopy',
'SIZE': cross + 'size',
'PROGSUFFIX': '.elf',
}
env = Environment(tools=('gcc', 'g++', 'gnulink', 'ar', 'as'), ENV=os.environ)
env.SetOption('warn', 'no-visual-c-missing')
env.Replace(**toolchain)
答案 2 :(得分:0)
考虑重新定义DefaultEnvironment而不是定义Environment
。
到目前为止我们介绍的所有Builder函数,例如 程序和库,实际上使用默认的构造环境 包含各种编译器和其他工具的设置 SCons默认进行配置,否则了解并具有 在您的系统上发现。默认构造的目标 环境是要进行许多配置以“正常工作”来构建 使用现成的工具进行最少配置的软件 变化。
这样, SCons 不会尝试根据常用用法进行预测并将其应用于您的项目。例如:
PATH = {'PATH' : ['C:/cygwin/bin']}
env = Environment(ENV=PATH)
env.Program('helloworld.c++')
将根据其认为最有可能的情况做出假设,并尝试使用 Visual Studio ,然后再使用它在PATH中找到的内容,而
PATH = {'PATH' : ['C:/cygwin/bin']}
env = DefaultEnvironment(ENV=PATH)
env.Program('helloworld.c++')
不会做这样的假设,直接进入PATH中找到的任何内容,而无需寻找 Visual Studio 。