我正在使用SCONS构建工具。
我无法使用在python脚本中初始化的环境变量。
在我的项目中,USER可以更改一些变量以使用编译器。
为此我们有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。
怎么做?
答案 0 :(得分:3)
默认情况下,SCons不使用调用的环境,这是为了确保无论环境具有哪种配置,都可以重现构建。
环境变量存储在密钥ENV
下的scons环境中,因此您可以访问如下的常规环境变量:
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"]
当然我不知道为什么你需要环境变量,所以这可能与你完全无关。
答案 1 :(得分:0)
我曾经有类似的需求,编译器正在寻找尚未设置的某个Env变量。我能够解决这个问题如下:
env = Environment()
env['ENV']['THE_VARIABLE'] = 'SomeValue'