1

我正在使用 SCONS 构建工具。
我无法使用在 python 脚本中初始化的环境变量。

在我的项目中,用户可以更改一些变量以使用编译器。

为此,我们有 2 个文件。

  • 配置文件
  • 构造

Config.py 包含所有变量,例如 Include 目录、CFLAGS、CPPDEFINES 等。所以,我们可以在这里设置一些变量。我需要在 Sconstruct 文件中使用的那些变量。在 config.py 我设置了一个变量,如下所示

SCONS_INC = "Include files"
os.environ["SCONS_INC"] = SCONS_INC

我需要在 Sconstruct File 中使用这些变量。代码是

env["CPPPATH"] = os.environ["SCONS_INC"] 

但我收到类似未定义变量 SCONS_INC 的错误。

这该怎么做?

4

2 回答 2

4

SCons 默认不使用调用的环境,这是为了确保无论您的环境具有哪些配置,您都可以重现构建。

环境变量存储在密钥下的 scons 环境中,ENV因此您可以像这样访问一般环境变量:

env = Environment()
variable = env['ENV']['SomeVariable']
env['ENV']['SomeVariable'] = SomeValue

我理解你的问题,就像你需要在 SCons 中使用 python 脚本中设置的变量一样。为此,您需要使用您结合描述的两种方法来传输它们。

env = Enviroment()
python_variable = os.environ['SomeVariable']
env['ENV']['SomeVariable'] = python_variable

但是,我可能会推荐其他控制构建的方法,因此您不必担心传输环境变量的麻烦。恕我直言,使用参数更简单。参数只是一个由调用 scons 生成的字典,所以当你说:

scons -D some_argument=blob

您可以通过简单地获得该论点:

some_variable = ARGUMENTS["some_argument"]

当然我不知道你为什么需要环境变量,所以这可能与你完全无关。

于 2013-04-22T11:10:43.257 回答
0

我曾经有过类似的需求,编译器正在寻找某个尚未设置的 Env 变量。我能够解决这个问题如下:

env = Environment()
env['ENV']['THE_VARIABLE'] = 'SomeValue'
于 2013-04-22T10:31:16.940 回答