cmake/ctest 生成 Test.xml(没有重建?)/无法加载缓存

cmake/ctest generate Test.xml (without rebuilding?) / could not load cache

我有一个基于 cmake 的 (C++) 项目,其中包括通过 add_test() 创建的测试。 构建过程基本上是:

一段时间以来效果很好。

我现在正在尝试让我的构建生成 Test.xml 作为管道构建的一部分提交 。它不适用于此项目。

Q1 我可以告诉 cmake 我想要一个 Test.xml 在它(进行测试)运行 测试时生成吗?

目前我认为Test.xml只能由运行宁ctest创建。 大概 ctest 汇总了测试结果,而 cmake 只是 运行 盲目地收集了它们? 有人可以证实或反驳吗?

所以我目前正在尝试 运行 ctest 使用:

ctest -vv -debug --output-on-failure -T test

因为这确实创建了我需要的 Test.xml 文件。 我必须添加 include(CTest) & include(Dart) 来修复“could not find DartConfiguration.tcl”。

然而,即使我之前 运行 "make test" 保证构建是最新的,它仍然尝试构建并且我得到:

Error: could not load cache

对于 运行 编译测试的测试(基于脚本的测试工作正常)。 它正在执行的命令是:

/opt/cmake-3.18.1/bin/cmake "--build" "<projectDir>/test/<TestName>" --target "<test_exe>"

CMakeCache.txtCMakeLists.txt 实际上住在“<projectDir>/cmake” 这就是缓存无法加载的原因。 命令应该是:

/opt/cmake-3.18.1/bin/cmake "--build" "<projectDir>/cmake" --target "<test_exe>"

Q2 有什么方法可以告诉 ctest 它不需要 运行 cmake 吗?

我的怀疑是没有。 ctest 是否必须调用 cmake 来 运行 测试?它只是监视和汇总输出吗?

如果我查看 DartConfiguration.tcl 我有:

SourceDirectory: <projectDir/cmake
BuildDirectory: <projectDir/cmake
ConfigureCommand: "/opt/cmake-3.18.1/bin/cmake" "<projectDir/cmake"
MakeCommand: /opt/cmake-3.18.1/bin/cmake --build . --config "${CTEST_CONFIGURATION_TYPE}" -- -i

我正在 运行ning ctest -T test 而不是 ctest -T build-and-test 为什么 ctest 试图构建?

我试过设置Ctest_build_command,但似乎对生成的DartConfiguration.tcl没有影响。

一些说明:

我以前从未使用过:

include(CTest)
include(Dart)

其中一个或另一个创建 DartConfiguration.tcl,它只是“键:值”对的列表。我认为这是在直接调用 ctest 时使用的,而这里不是这种情况。 尽管阅读了 this.

,但我并不完全清楚它们的原因和实际用途

也发布在cmake的讨论频道- https://discourse.cmake.org/t/cmake-ctest-generate-test-xml-without-rebuilding-could-not-load-cache/2025

事实证明,我有一些伪测试用于通过 cmake --build 构建测试驱动程序。这些是明确和莫名其妙地使用 CMAKE_CURRENT_DIRECTORY 而不是 CMAKE_SOURCE_DIR。哎呀