在SConscript文件之间传递目标

时间:2013-05-04 16:47:18

标签: unit-testing scons

我正在尝试在SCons中使用分层构建。目录结构如下所示:

code/SConstruct
code/src/SConscript
code/src/main.c
code/src/foo.c
code/src/bar.c
code/src/tests/SConscript
code/src/tests/test_foo.c
code/src/tests/test_bar.c

test _ * .c需要链接到实现它们测试的函数的c文件,因此test_foo.c必须链接到foo.c。所以src / SConscript必须将一些目标返回到src / tests / SConscript,这样它就可以构造二进制文件(每个测试都有1个)。我的问题是使用Return()函数实现此目的的最佳方法是什么?我希望返回的文件的顺序无关紧要,因此元组不会这样做。我的想法是构造一个字典,键是文件名。我想检查一下没有更好的方法来做到这一点;也许我可以用不同的方式构建文件以便于更清晰的构建?

提前致谢,

1 个答案:

答案 0 :(得分:1)

您可以考虑创建2个库:libfoo和libbar,而不是传递目标。然后在编译test_foo和test_bar二进制文件时,通过从variant_dir引用它们来链接这些库。试图绕过这样的目标往往变得复杂和难以维护。

如果你想知道什么是SCons variant_dir,它是一种将构建输出(二进制文件,库,对象等)放在源代码以外的目录中的方法。使用variant_dir函数调用上的SConscript()参数,如here所述。

如上所述here,您只需引用源文件,而不必创建库。这是一个简单的例子:(注意'#'字符表示相对于根级SConstruct)

   env.Program(target='test_foo', ['test_foo.c', '#src/foo.c'])