将SConstruct代码划分为一组别名;没有默认调用的代码

时间:2014-10-20 13:42:08

标签: python scons build-tools

我正在尝试将我的SConstruct文件分成每个块的代码块 由Alias控制,默认情况下不运行任何代码;即只需运行scons。 别名当然是从命令行运行,例如(在下面的例子中):

scons h

以下是一些示例代码。这似乎工作正常。但是,有三个问题。

  1. 有更好的方法吗?

  2. 更具体地说,我不明白Alias调用中的目标参数如何 传递给hh3动作函数。我注意到,如果我把它们留空了 构建不起作用。但目标没有明显的方法可以通过 这些功能,因为他们不接受任何论据。

  3. 相关地,文档说动作函数需要targetsource, 和env参数。这些动作功能没有这些,但无论如何都有效。怎么来的?

  4. 代码如下:

    #!/usr/bin/python                                                                                                                                         
    
    Default(None)
    
    def h(env):
        x = env.Program("hello1", "hello1.c")
        y = env.Program("hello2", "hello2.c")
        return 0
    
    def h3(env):
        y = env.Program("hello3", "hello3.c")
        return 0
    
    env = Environment()
    env.AddMethod(h, "HELLO")
    env.AddMethod(h3, "HELLO3")
    env.Alias("h", ["hello1", "hello2"], env.HELLO())
    env.Alias("h3", ["hello3"],env.HELLO3())
    

1 个答案:

答案 0 :(得分:1)

回答你的第一个问题:是的,有更好的方法。

env = Environment()

# h:
x = env.Program("hello1", "hello1.c")
y = env.Program("hello2", "hello2.c")
env.Alias("h", [x,y])
# equivalently: env.alias("h", ["hello1", "hello2"])

# h3
y = env.Program("hello3", "hello3.c")
env.Alias("h3", y)

Default(None)

或者,如果您想在子程序中对Program()个电话进行分组,那也没问题。对于您正在做的事情,您根本不需要AddMethod()

env = Environment()

def h(env):
    x = env.Program("hello1", "hello1.c")
    y = env.Program("hello2", "hello2.c")
    return x,y

def h3(env):
    return env.Program("hello3", "hello3.c")

env.Alias("h", h(env))
env.Alias("h3", h3(env))
Default(None)