使用cmake如何获得ctest的详细输出?
我正在使用CMake来构build我的项目。 我添加了一个使用boostunit testing框架的unit testing二进制文件。 这一个二进制包含了所有的unit testing。 我已经添加了由CTest运行的二进制文件:
ADD_EXECUTABLE( tftest test-main.cpp ) ENABLE_TESTING() ADD_TEST( UnitTests tftest) 但Visual Studio中的构build输出仅显示运行ctest的结果:
  Start 1: UnitTests 1/1 Test #1: UnitTests ................***Failed 0.05 sec 0% tests passed, 1 tests failed out of 1 
这不是很有帮助,因为我看不到哪个testing失败。 如果我从命令行手动运行ctest –verbose我从增强unit testing的输出,告诉什么实际上失败:
 1: Test command: tftest.exe 1: Test timeout computed to be: 9.99988e+006 1: Running 4 test cases... 1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed 1: 1: *** 1 failure detected in test suite "Master Test Suite" 1/1 Test #1: UnitTests ................***Failed 0.00 sec 
那么,我需要在CMakeLists.txt中更改ctest以便随时运行–verbose? 有没有更好的方法来使用cmake / ctest的增强unit testing?
 您可以设置环境variablesCTEST_OUTPUT_ON_FAILURE ,每当testing失败时它将显示来自testing程序的任何输出。 使用Makefiles和命令行时的一种方法如下: 
 env CTEST_OUTPUT_ON_FAILURE=1 make check 
这个问题和答案显示了如何在Visual Studio中设置环境variables。
- 
您可以检查 Testing/Temporary子文件夹。 运行maketesting后自动创build。 该文件夹包含两个文件:LastTest.log和LastTestsFailed.log。LastTest.log包含运行testing所需的输出。LastTestFailed.log包含失败testing的名称。 所以你可以在执行make test后手动检查它们。
- 
第二种方法是让ctest在运行testing后显示日志文件的内容: - 
在build dir (从中运行 make test)文件CTestCustom.ctest(例如,你可以用configure file命令来完成)CTEST_CUSTOM_POST_TEST(“cat Testing / Temporary / LastTest.log”) 
 
- 
您可以使用任何执行类似操作的Windows cmd命令来代替cat。
-  再次运行make test并获得利润!
有关定制ctest的更多信息,请点击这里 。 只需进入“自定义cmake”部分。 祝你好运!
我必须自己添加“检查”目标。 “做testing”由于某种原因不做任何事情。 所以我做了什么(就像在某个地方build议在stackoverflow) – 我手动添加此目标。 为了得到详细的输出,我只是这样写的:
 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose) 
 你可以直接调用ctest ,做完你的项目后。 
 ctest --verbose 
 make check CTEST_OUTPUT_ON_FAILURE=TRUE 
 我的方法是来自ony , zbyszek和tarc的答案的组合。 我用-E env CTEST_OUTPUT_ON_FAILURE=1参数使用${CMAKE_COMMAND}variables(设置为被调用的cmake可执行文件的绝对path)来使用${CMAKE_CTEST_COMMAND} -C $<CONFIG>调用实际的ctest命令。 为了弄清楚发生了什么,我从三个cmake -E echo命令开始,显示当前的工作目录和要调用的ctest命令。 这是我如何调用add_custom_target 。 
 add_custom_target(check ${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG> COMMAND ${CMAKE_COMMAND} -E echo ---------------------------------- COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1 ${CMAKE_CTEST_COMMAND} -C $<CONFIG> WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS ALL_BUILD ) 
 这与MSVC IDE很好,其中任何testing错误都显示为可点击的编译错误。 有关cmake -E便携式命令行工具模式的文档,请参见cmake -E env 。 我还添加了对ALL_BUILD的依赖关系,以便在调用check目标之前构build所有项目。  (在Linux版本上,可能需要用ALLreplaceALL_BUILD ;我还没有在Linux上testing过。) 
对于使用Visual Studio的人来说,这里是另一个主题的变体(hack):
 cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS