我有一个基于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。哎呀。