cmake/ctest 生成 Test.xml(没有重建?)/无法加载缓存
cmake/ctest generate Test.xml (without rebuilding?) / could not load cache
我有一个基于 cmake
的 (C++) 项目,其中包括通过 add_test()
创建的测试。
构建过程基本上是:
- cmake
- 制作所有测试套件
- 进行测试
一段时间以来效果很好。
我现在正在尝试让我的构建生成 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.txt
和 CMakeLists.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没有影响。
一些说明:
ctest 对我来说适用于其他使用非源构建的项目
如果不进行大规模重构,这个版本还不能使用源代码之外的构建。
源根实际上是“<projectDir>
”
CMakeLists.txt住在“<projectDir>/cmake
”
程序源代码位于“<projectDir>/src
”
测试脚本和代码在“<projectDir>/test
”
我的构建工作使用:
enable_testing()
我以前从未使用过:
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。哎呀
我有一个基于 cmake
的 (C++) 项目,其中包括通过 add_test()
创建的测试。
构建过程基本上是:
- cmake
- 制作所有测试套件
- 进行测试
一段时间以来效果很好。
我现在正在尝试让我的构建生成 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.txt
和 CMakeLists.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没有影响。
一些说明:
ctest 对我来说适用于其他使用非源构建的项目
如果不进行大规模重构,这个版本还不能使用源代码之外的构建。
源根实际上是“
<projectDir>
”CMakeLists.txt住在“
<projectDir>/cmake
”程序源代码位于“
<projectDir>/src
”测试脚本和代码在“
<projectDir>/test
”我的构建工作使用:
enable_testing()
我以前从未使用过:
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。哎呀