2

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

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

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

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

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

然后以某种方式选择这些Environment对象之一,可能带有命令行参数scons

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

4

2 回答 2

1

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

env = EnvironmentFactory.createEnv(cmdLineArgs)

另一个有用的 SCons 工具是使用本章所述的 ParseFlags()、ParseConfig() 和 MergeFlags() 从命令行选项“自动”填充环境。

于 2013-01-22T13:36:10.283 回答
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\\')
于 2013-02-26T19:57:26.547 回答