cmake/ctest generate Test.xml(不重新生成?)/无法加载缓存



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

  • cmake
  • 生成所有测试套件
  • 进行测试

这已经运行了一段时间。

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

Q1我可以告诉cmake我希望在它(make-test(运行测试时生成Test.xml吗?

目前我认为只有运行ctest才能创建Test.xml。假设ctest聚合了测试结果,而cmake只是盲目地运行它们?有人能证实或反驳这一点吗?

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

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

因为这确实创建了我需要的Test.xml文件。我不得不添加include(CTest)&CCD_ 11来固定";could not find DartConfiguration.tcl";。

然而,即使我以前运行过";CCD_ 13";它保证了构建是最新的,它仍然试图构建,我得到了:

Error: could not load cache

对于运行编译测试的测试(基于脚本的测试运行良好(。它正在执行的命令是:

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

CCD_ 14&CCD_ 15实际居住在";CCD_ 16";这就是为什么不能加载高速缓存的原因。命令应该是:

/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

我运行的是ctest-T测试,而不是ctest-T构建和测试,ctest为什么要尝试构建?

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

一些澄清:

  • ctest适用于其他使用源代码外构建的项目

  • 如果没有大规模的重构,这个还不能使用源代码外构建。

  • 源根实际上是";CCD_ 17";

  • CMakeLists.txt位于";CCD_ 18";

  • 程序源代码存在于";CCD_ 19";

  • 测试脚本和代码生活在";CCD_ 20";

  • 我的构建使用:

    enable_testing((

我以前从未使用过:

include(CTest)
include(Dart)

其中一个或另一个创建DartConfiguration.tcl;key:值;成对。我认为这是在直接调用ctest时使用的,而这里的情况并非如此。尽管我读过这篇文章,但我并不完全清楚它们到底是为了什么。

也发布在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。哎呀。

相关内容

  • 没有找到相关文章

最新更新