SCons:将目标链接到SConscript

时间:2012-08-02 19:17:19

标签: target scons

我对使用 SCons 的目标的功能感到困惑。我目前正在尝试创建一个简单的目标check来启动位于Boost.Test文件夹中的tests套件。为了启动所有测试,我有一个tests/SConscript文件,我只需调用Program方法就可以在其中注册包含测试的cpp文件。

如果请求目标tests/SConscript,我只想告诉 SCons 他需要调用check文件,否则,只需通过调用{{{{}}来构建程序1}}

src/SConscript

2 个答案:

答案 0 :(得分:1)

正如你的答案中所提到的,你可以使用SCons Alias()函数为一个或多个目标指定名称,但如果你只是在没有指定的情况下执行scons,这就不能告诉SCons何时构建目标目标。当您没有指定任何目标时,您会注意到将构建和/或执行单元测试。

要告诉SCons应该构建什么,您可以使用SCons Default() function。当你不使用这个函数时,默认情况下会构建每个目标:显然只有那些需要构建的目标,根据依赖性等。

要仅在默认情况下在src/SConscript中构建目标,然后假设其为库,您可以执行以下操作:

libTarget = env.Library('yourLib', theSourceFiles)
env.Default(libTarget)

您可以将Default()函数用于多个不同的目标。

现在,当您执行scons而没有任何目标时,只会构建使用Default()函数设置的目标。如果执行scons check,那么将构建检查目标及其依赖项(假设您使用检查目标调用Alias()并且还使用检查目标调用Default())

答案 1 :(得分:0)

我将回答我自己的问题。根据我的看法,您可以使用SCons中的别名将构建器绑定到rule

我在这个地址看过克里斯福斯特的帖子:http://www.scons.org/wiki/UnitTests提出了以下想法:

对于我们要添加的每个测试,我们将其添加到check目标,如下所示:

prog = env.Program(...)
env.Alias('check', prog)
env.Alias(nameOfTheTest, prog)

这样,我可以用两种不同的方式调用我的测试:

$> scons check             # Calls all the tests of the suite
$> scons nameOfTheTest     # Only calls the test we added

希望有所帮助。感谢