我刚刚发现了SCons,一个很棒的构建工具。
我需要在多个环境中构建我的项目,即使用不同的库路径并根据机器包含路径。
由于SConstruct
拥有所有可用的Python,我可以想象各种方法来实现这一点。一种可能性是拥有一个SConstruct
脚本并实例化多个Environment
对象。
envFoo = Environment()
envFoo.Append(CPPPATH = [...])
envBar = Environment()
envBar.Append(CPPPATH = [...])
然后以某种方式选择其中一个Environment
对象,可能使用命令行参数scons
。
有经验的scons用户的问题:这是要走的路吗?这样做最方便的方法是什么?
答案 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\\')