1

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

scons h

这是一些示例代码。这似乎工作正常。然而,三个问题。

  1. 有一个更好的方法吗?

  2. 更具体地说,我不明白 Alias 调用中的目标参数如何传递给handh3操作函数。我注意到如果我将它们留空,构建将不起作用。然而,没有明显的方法可以将目标传递给这些函数,因为它们不接受任何参数。

  3. 相关地,文档说动作函数需要targetsourceenv参数。这些动作函数没有这些,但无论如何都可以工作。怎么来的?

代码如下:

#!/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())
4

1 回答 1

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)
于 2014-10-29T14:25:57.227 回答