我需要在构建机器(linux)上构建boost回归测试套件,然后在SUT(目标机器,linux)上运行。必需的boost库已作为共享库安装在SUT上。我在构建机器上正确安装了gcc工具链。 SUT根本没有gcc。
我在构建机器上构建了bjam作为本机实用程序。然后我交叉编译了一些有用的实用程序(process_jam_log和library_status),如下所述:http://www.boost.org/doc/regression/library_status/doc/library_status.html
主要思想是在构建机器上构建(交叉编译)整体回归测试套件,然后复制到SUT,最后在后者上运行。 但是当bjam构建一些测试时,它会尝试在本机环境中的构建机器上立即运行测试。
来自boost.org的决定我发现(例如http://www.boost.org/development/running_regression_tests.html)假设有人想要在已经安装的机器升级库上构建和运行测试套件。似乎我的案例在谷歌中没有提到。
我的问题是如何强制bjam错过跑步阶段?或者如何在别处达到我的意图?
UPD。我有一个非常方便的脚本框架。该框架可以在构建机器上构建测试套件,将其部署在SUT(目标)上,在目标上运行,获取有关该启动的总体有用信息,并最终分析测试套件是通过还是失败。 这就是为什么我正在寻找一些可以使用整体测试套件而不是单独测试的决定。
答案 0 :(得分:0)
对于交叉编译测试,您需要使用帮助程序脚本/程序来运行已编译的测试可执行文件。你需要:
在Boost Build Testing文档中记录了testing.launcher构建属性。
答案 1 :(得分:0)
我通过修补boost源解决了这个问题。
补丁的主要思想是记录每个启动测试命令,而不是立即运行它。当完整构建整个测试套件时,我们可以将这些记录的命令转换为启动脚本,然后将套件和脚本复制到目标机器以在那里运行。
由于我使用了boost 1.54.0源代码,因此我的补丁适用于该版本。我猜这个补丁的采用对于另一个升级版本并不困难。
diff -pruN boost_1_54_0.orig/tools/build/v2/tools/testing.jam boost_1_54_0/tools/build/v2/tools/testing.jam
--- boost_1_54_0.orig/tools/build/v2/tools/testing.jam 2013-05-21 08:14:18.000000000 +0400
+++ boost_1_54_0/tools/build/v2/tools/testing.jam 2015-07-23 19:24:42.000000000 +0300
@@ -492,23 +492,8 @@ if --verbose-test in [ modules.peek : AR
actions capture-output bind INPUT_FILES output-file
{
$(PATH_SETUP)
+ echo $(LAUNCHER) "$(>)" $(ARGS) "$(INPUT_FILES)" >> "$(>).runtest"
- $(LAUNCHER) "$(>)" $(ARGS) "$(INPUT_FILES)" > "$(output-file)" 2>&1
- $(.SET_STATUS)
- $(.RUN_OUTPUT_NL) >> "$(output-file)"
- echo EXIT STATUS: $(.STATUS) >> "$(output-file)"
- if $(.STATUS_0)
- $(.CP) "$(output-file)" "$(<)"
- $(.ENDIF)
- $(.SHELL_SET)verbose=$(.VERBOSE_TEST)
- if $(.STATUS_NOT_0)
- $(.SHELL_SET)verbose=1
- $(.ENDIF)
- if $(.VERBOSE)
- echo ====== BEGIN OUTPUT ======
- $(.CATENATE) "$(output-file)"
- echo ====== END OUTPUT ======
- $(.ENDIF)
- exit $(.STATUS)
+ exit 0
}