我正在尝试将我的SConstruct文件分成每个块的代码块
由Alias控制,默认情况下不运行任何代码;即只需运行scons
。
别名当然是从命令行运行,例如(在下面的例子中):
scons h
以下是一些示例代码。这似乎工作正常。但是,有三个问题。
有更好的方法吗?
更具体地说,我不明白Alias调用中的目标参数如何
传递给h
和h3
动作函数。我注意到,如果我把它们留空了
构建不起作用。但目标没有明显的方法可以通过
这些功能,因为他们不接受任何论据。
相关地,文档说动作函数需要target
,source
,
和env
参数。这些动作功能没有这些,但无论如何都有效。怎么来的?
代码如下:
#!/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())
答案 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)