How to build in different environments with SCons?
我刚刚发现了 SCons,这是一个很棒的构建工具。
我需要在多个环境中构建我的项目,即使用不同的库路径和包含路径,具体取决于机器。
由于
1 2 3 4 5 | envFoo = Environment() envFoo.Append(CPPPATH = [...]) envBar = Environment() envBar.Append(CPPPATH = [...]) |
然后以某种方式选择这些
有经验的 scons 用户的问题:这是要走的路吗?这样做最方便的方法是什么?
你可以这样做
1 2 3 4 5 6 7 8 9 10 | 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 运行时确定操作系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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\\\') |
这肯定会奏效,并且对于更简单的情况可能是一个很好的解决方案。我有一个更复杂的情况,我实际上使用 Python 类创建了一个 EnvironmentFactory,如下所示:
1 | env = EnvironmentFactory.createEnv(cmdLineArgs) |
另一个有用的 SCons 工具是使用本章所述的 ParseFlags()、ParseConfig() 和 MergeFlags() 从命令行选项"自动"填充环境。