我对使用 SCons 的目标的功能感到困惑。我目前正在尝试创建一个简单的目标check
来启动位于Boost.Test
文件夹中的tests
套件。为了启动所有测试,我有一个tests/SConscript
文件,我只需调用Program
方法就可以在其中注册包含测试的cpp文件。
如果请求目标tests/SConscript
,我只想告诉 SCons 他需要调用check
文件,否则,只需通过调用{{{{}}来构建程序1}}
src/SConscript
答案 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
希望有所帮助。感谢