1

我正在尝试在 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() 函数完成此任务的最佳方法是什么?我希望返回文件的顺序无关紧要,所以元组不行。我的想法是构建一个以文件名为键的字典。我想检查没有更好的方法来做到这一点;也许我可以以不同的方式构建文件以促进更清洁的构建?

提前致谢,

4

1 回答 1

1

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

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

无需创建库,您只需参考源文件即可,如此所述。这是一个简单的例子:(注意'#'字符的意思是相对于根级SConstruct)

   env.Program(target='test_foo', ['test_foo.c', '#src/foo.c'])
于 2013-05-04T18:00:12.670 回答