Build 如何使用SCON在不同的环境中构建?

Build 如何使用SCON在不同的环境中构建?,build,environment-variables,scons,Build,Environment Variables,Scons,我刚刚发现了SCons,一个很棒的构建工具 我需要在多个环境中构建我的项目,即使用不同的库路径和包含路径(取决于机器) 由于sconstuct提供了所有Python,我可以想象实现这一点的各种方法。一种可能是使用一个SConstruct脚本并实例化多个环境对象 envFoo = Environment() envFoo.Append(CPPPATH = [...]) envBar = Environment() envBar.Append(CPPPATH = [...]) 然后以某种方式选择

我刚刚发现了SCons,一个很棒的构建工具

我需要在多个环境中构建我的项目,即使用不同的库路径和包含路径(取决于机器)

由于
sconstuct
提供了所有Python,我可以想象实现这一点的各种方法。一种可能是使用一个
SConstruct
脚本并实例化多个
环境
对象

envFoo = Environment()
envFoo.Append(CPPPATH = [...])

envBar = Environment()
envBar.Append(CPPPATH = [...])
然后以某种方式选择其中一个
Environment
对象,可能使用命令行参数
scons


对于经验丰富的scons用户来说,一个问题是:这是一条路吗?做这件事最方便的方法是什么?

这肯定会起作用,而且对于更简单的情况可能是一个很好的解决方案。我遇到了一个更复杂的情况,我实际上使用Python类创建了一个EnvironmentFactory,如下所示:

env = EnvironmentFactory.createEnv(cmdLineArgs)
另一个有用的SCons工具是使用ParseFlags()、ParseConfig()和MergeFlags()从命令行选项“自动”填充环境,如中所述。

您可以这样做

envSelect = ARGUMENTS.get('env', "default")

if envSelect == "default":
    env = Environment()
elif envSelect == "env2":
    env = Environment(whatever you want to do here)
elif envSelect == "env3":
    env = Environment(whatever you want to do here)
else:
    env = Environment(whatever you want to do here)
在运行命令
scons
或者你可以
scons env=env2
希望这能回答你的问题

编辑:这是我正在处理的一个项目的一个片段,我想在SCON运行时确定操作系统

import sys
import os
import glob
import subprocess
#Find the host Operating System
platform = sys.platform

if platform != "win32":
    env = Environment()
else:
    #Specify to compile in 32-bit mode for Visual Studio
    #This is needed as Qt libraries on Windows for Visual
    #Studio are 32-bit only
    env = Environment(TARGET_ARCH = 'x86')

#Get Qt directory as scons argument or use default setting
if platform != "win32":
    qtDir = ARGUMENTS.get('qt', '/usr/local/Trolltech/Qt-4.8.4/')
else:
    qtDir = ARGUMENTS.get('qt', 'C:\\Qt\\4.8.4\\')