【问题标题】:How to build in different environments with SCons?如何使用 SCons 在不同的环境中构建?
【发布时间】:2013-01-22 12:13:20
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: build environment-variables scons


    【解决方案1】:

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

    env = EnvironmentFactory.createEnv(cmdLineArgs)
    

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

    【讨论】:

      【解决方案2】:

      你可以这样做

      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希望这能回答你的问题

      编辑:这是我正在处理的项目中的一个 sn-p,我想在 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\\')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 1970-01-01
        • 2019-05-24
        • 1970-01-01
        相关资源
        最近更新 更多