如何使用scons进行交叉构建
How to use scons for cross build
我正在尝试创建最简单的 SConstruct 文件来交叉编译程序。
我尝试了不同的设置,最新的 SConstruct 文件在这里:
env_options = {
"CC" : "arm-linux-gnueabihf-gcc",
"CXX" : "arm-linux-gnueabihf-g++",
"LD" : "arm-linux-gnueabihf-ld",
"AR" : "arm-linux-gnueabihf-ar",
"STRIP" : "arm-linux-gnueabihf-strip"
}
env = Environment(**env_options)
path = ['/path/to/toolchain/bin/']
env.Append( ENV = {'PATH' : path})
p = Program( "prog", [ "prog.c", "mylib.c" ], CFLAGS=[ '-Iinclude', '-Werror', '-Wall', '-Wextra' ] )
env.Dump()
的输出显示例如:
{ 'AR': 'arm-linux-gnueabihf-ar',
'CC': 'arm-linux-gnueabihf-gcc',
'CXX': 'arm-linux-gnueabihf-g++',
'ENV': { 'PATH': [ '/path/to/toolchain/bin/']},
'LD': 'arm-linux-gnueabihf-ld',
'TOOLS': [ 'default',
'gnulink',
'gcc',
'g++',
'gas',
'ar',
'filesystem',
'm4',
'zip']
}
我在 env.Dump()
输出中没有看到任何惊喜(尤其是没有标准的系统路径),并且认为万一 scons 找不到 env_options
中列出的工具我至少会得到一条错误信息。
相反,scons 使用默认工具并为我的主机系统构建程序。
我考虑了发布的答案 here(1) and here(2) - 到目前为止没有成功。
- 我错过了什么?
- scons 怎么可能仍然找到并使用默认工具(我明确声明使用二进制
arm-linux-gnueabihf-gcc-4.8.3
并且没有设置像 /bin/
或 /usr/bin
这样的系统路径在环境中)?
- 如何强制 scons 显式仅使用我传递的 paths/tools(从头开始构建环境)?
p = Program( "prog", [ "prog.c", "mylib.c" ], CFLAGS=[ '-Iinclude', '-Werror', '-Wall', '-Wextra' ] )
应该是
p = env.Program( "prog", [ "prog.c", "mylib.c" ], CFLAGS=[ '-Iinclude', '-Werror', '-Wall', '-Wextra' ] )
使用 Program 而不是 env.Program 使用没有将 CC 等设置为任何非默认值的默认环境。
我正在尝试创建最简单的 SConstruct 文件来交叉编译程序。 我尝试了不同的设置,最新的 SConstruct 文件在这里:
env_options = {
"CC" : "arm-linux-gnueabihf-gcc",
"CXX" : "arm-linux-gnueabihf-g++",
"LD" : "arm-linux-gnueabihf-ld",
"AR" : "arm-linux-gnueabihf-ar",
"STRIP" : "arm-linux-gnueabihf-strip"
}
env = Environment(**env_options)
path = ['/path/to/toolchain/bin/']
env.Append( ENV = {'PATH' : path})
p = Program( "prog", [ "prog.c", "mylib.c" ], CFLAGS=[ '-Iinclude', '-Werror', '-Wall', '-Wextra' ] )
env.Dump()
的输出显示例如:
{ 'AR': 'arm-linux-gnueabihf-ar',
'CC': 'arm-linux-gnueabihf-gcc',
'CXX': 'arm-linux-gnueabihf-g++',
'ENV': { 'PATH': [ '/path/to/toolchain/bin/']},
'LD': 'arm-linux-gnueabihf-ld',
'TOOLS': [ 'default',
'gnulink',
'gcc',
'g++',
'gas',
'ar',
'filesystem',
'm4',
'zip']
}
我在 env.Dump()
输出中没有看到任何惊喜(尤其是没有标准的系统路径),并且认为万一 scons 找不到 env_options
中列出的工具我至少会得到一条错误信息。
相反,scons 使用默认工具并为我的主机系统构建程序。
我考虑了发布的答案 here(1) and here(2) - 到目前为止没有成功。
- 我错过了什么?
- scons 怎么可能仍然找到并使用默认工具(我明确声明使用二进制
arm-linux-gnueabihf-gcc-4.8.3
并且没有设置像/bin/
或/usr/bin
这样的系统路径在环境中)? - 如何强制 scons 显式仅使用我传递的 paths/tools(从头开始构建环境)?
p = Program( "prog", [ "prog.c", "mylib.c" ], CFLAGS=[ '-Iinclude', '-Werror', '-Wall', '-Wextra' ] )
应该是
p = env.Program( "prog", [ "prog.c", "mylib.c" ], CFLAGS=[ '-Iinclude', '-Werror', '-Wall', '-Wextra' ] )
使用 Program 而不是 env.Program 使用没有将 CC 等设置为任何非默认值的默认环境。