0

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

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

$> scons check
4

2 回答 2

1

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

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

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

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

您可以对几个不同的目标使用 Default() 函数。

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

于 2012-08-03T08:17:41.557 回答
0

我要回答我自己的问题。根据我所见,您可以使用 SCons 中的别名将Builder绑定到rule.

我在这个地址阅读了 Chris Foster 的一篇文章: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

希望有帮助。谢谢

于 2012-08-02T20:56:51.507 回答