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

时间:2013-01-22 12:13:20

标签: build environment-variables scons

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

我需要在多个环境中构建我的项目,即使用不同的库路径并根据机器包含路径。

由于SConstruct拥有所有可用的Python,我可以想象各种方法来实现这一点。一种可能性是拥有一个SConstruct脚本并实例化多个Environment对象。

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

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

然后以某种方式选择其中一个Environment对象,可能使用命令行参数scons

有经验的scons用户的问题:这是要走的路吗?这样做最方便的方法是什么?

2 个答案:

答案 0 :(得分:1)

这肯定会奏效,对于更简单的情况来说可能是一个很好的解决方案。我有一个更复杂的情况,我实际上使用Python类创建一个EnvironmentFactory,如下所示:

env = EnvironmentFactory.createEnv(cmdLineArgs)

另一个有用的SCons工具是使用ParseFlags(),ParseConfig()和MergeFlags()从命令行选项“自动”填充Environment,如this chapter中所述。

答案 1 :(得分:1)

你可以这样做

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)

使用ARGUMENTS.get,只需运行命令scons即可指定默认值 或者你做scons env=env2希望这回答你的问题

编辑:这是我正在研究的项目的片段,我想在scons运行时确定操作系统

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\\')