【问题标题】:How to use scons for cross build如何使用 scons 进行交叉构建
【发布时间】:2015-07-29 17:57:56
【问题描述】:

我正在尝试创建最简单的 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)here(2) 发布的答案 - 到目前为止没有成功。

  • 我错过了什么?
  • scons 怎么可能仍然找到并使用默认工具(我明确声明使用二进制 arm-linux-gnueabihf-gcc-4.8.3 并且在 ENV 中没有设置像 /bin//usr/bin 这样的系统路径)?
  • 如何强制 scons 明确地仅使用我传递的路径/工具(从头开始构建环境)?

【问题讨论】:

标签: python c linux scons


【解决方案1】:
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 等设置为任何非默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2022-01-25
    相关资源
    最近更新 更多