测试
相关代码:3_test
添加测试也是一个非常直观的过程,主要步骤就是:包含 CTest
, 调用 add_test
, 调用 set_tests_properties
。
基本测试方式
在顶级 CMakeLists.txt
文件的底部,我们添加一些基本的测试来验证应用程序能够成功的工作:
######Do Test with basic instruction
include(CTest)
# does the application run
add_test (TutorialRuns Tutorial 25)
# does it sqrt of 25
add_test (TutorialComp25 Tutorial 25)
set_tests_properties (TutorialComp25 PROPERTIES PASS_REGULAR_EXPRESSION “25 is 5”)
# does it handle negative numbers
add_test (TutorialNegative Tutorial -25)
set_tests_properties (TutorialNegative PROPERTIES PASS_REGULAR_EXPRESSION “-25 is 0”)
# does it handle small numbers
add_test (TutorialSmall Tutorial 0.0001)
set_tests_properties (TutorialSmall PROPERTIES PASS_REGULAR_EXPRESSION “0.0001 is 0.01”)
# does the usage message work?
add_test (TutorialUsage Tutorial)
set_tests_properties (TutorialUsage PROPERTIES PASS_REGULAR_EXPRESSION “Usage:.*number”)
上述测试,分别通过 add_test
调用项目可执行文件,并传入参数。特定情况,通过 set_tests_properties
对输出进行检测验证。在这里,验证计算好的平方根是不是正确的,并且如果提供了错误的参数,将会打印使用信息中打印。分述如下:
TutorialRuns
, 测试运行 Tutorial 25
是否成功返回(返回0)。
TutorialComp25
, 测试运行 Tutorial 25
, 并且检测输出中是否有 25 is 5
字符串,以确定运行是否正确。
TutorialNegative
, 测试运行 Tutorial -25
, 并验证输出是否有 -25 is 0
字符串。
TutorialSmall
, 测试运行 Tutorial 0.0001
, 并验证输出是否有 0.0001 is 0.01
字符串。
TutorialUsage
, 测试运行 Tutorial
, 并验证输出中是否有 Usage:.*number
注意这里有正则表达式。
编译之后,我们可以运行 ctest
命令行工具来运行测试。
借助宏进行测试
前面的测试中,第一个测试仅仅验证应用程序是否运行,没有 segfault
或者崩溃信息,并且返回值为0.这是 CTest
测试的基本形式。接下来的几行利用了 PASS_REGULAR_EXPRESSION
测试属性来验证测试输出是否包含特定字符串。如果你想要加入许多包含不同输入值的的测试,你可能需要在顶级 CMakeLists.txt
考虑创建类似如下的宏:
#define a macro to simplify adding tests, then use it
macro (do_test arg result)
add_test (TutorialComp${arg} Tutorial ${arg})
set_tests_properties (TutorialComp${arg}
PROPERTIES PASS_REGULAR_EXPRESSION ${result})
endmacro (do_test)
# do a bunch of result based tests
do_test (25 "25 is 5")
do_test (-25 "-25 is 0")
对每一个 do_test
宏的调用,都会导致向项目中添加一个测试,包含该测试的名字、输入,以及基于其参数的结果输出。
过程
下面是大致输出:
生成 Makefile
之前
$ls -p
tree.cmakelog tree.makelog tree.origin tree.testlog tutorial/
$tree . >tree.origin
$cat tree.origin
.
├── tree.cmakelog
├── tree.makelog
├── tree.origin
├── tree.testlog
└── tutorial
├── CMakeLists.txt
├── MathFunctions
│ ├── CMakeLists.txt
│ ├── MathFunctions.h
│ └── mysqrt.cpp
├── TutorialConfig.h.in
└── tutorial.cpp
2 directories, 10 files
生成 Makefile
的过程
$cmake tutorial/
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/miracle/mydata/orgmode/data/f80366ab-6a10-4de9-9793-3a531afbc192/cmake/3_test
$tree . >tree.cmakelog
$ls
CMakeCache.txt CTestTestfile.cmake Makefile Testing cmake_install.cmake tree.makelog tree.testlog
CMakeFiles DartConfiguration.tcl MathFunctions TutorialConfig.h tree.cmakelog tree.origin tutorial
$cat tree.cmakelog
.
├── CMakeCache.txt
├── CMakeFiles
│ ├── CMakeCCompiler.cmake
│ ├── cmake.check_cache
│ ├── CMakeCXXCompiler.cmake
│ ├── CMakeDetermineCompilerABI_C.bin
│ ├── CMakeDetermineCompilerABI_CXX.bin
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeOutput.log
│ ├── CMakeRuleHashes.txt
│ ├── CMakeSystem.cmake
│ ├── CMakeTmp
│ │ └── CMakeFiles
│ │ └── cmTryCompileExec.dir
│ ├── CompilerIdC
│ │ ├── a.out
│ │ └── CMakeCCompilerId.c
│ ├── CompilerIdCXX
│ │ ├── a.out
│ │ └── CMakeCXXCompilerId.cpp
│ ├── ContinuousBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Continuous.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousSubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Experimental.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalSubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── NightlyBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Nightly.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyMemoryCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlySubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── progress.marks
│ ├── TargetDirectories.txt
│ └── Tutorial.dir
│ ├── build.make
│ ├── cmake_clean.cmake
│ ├── DependInfo.cmake
│ ├── depend.make
│ ├── flags.make
│ ├── link.txt
│ └── progress.make
├── cmake_install.cmake
├── CTestTestfile.cmake
├── DartConfiguration.tcl
├── Makefile
├── MathFunctions
│ ├── CMakeFiles
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── MathFunctions.dir
│ │ │ ├── build.make
│ │ │ ├── cmake_clean.cmake
│ │ │ ├── cmake_clean_target.cmake
│ │ │ ├── DependInfo.cmake
│ │ │ ├── depend.make
│ │ │ ├── flags.make
│ │ │ ├── link.txt
│ │ │ └── progress.make
│ │ └── progress.marks
│ ├── cmake_install.cmake
│ └── Makefile
├── Testing
│ └── Temporary
├── tree.cmakelog
├── tree.makelog
├── tree.origin
├── tree.testlog
├── tutorial
│ ├── CMakeLists.txt
│ ├── MathFunctions
│ │ ├── CMakeLists.txt
│ │ ├── MathFunctions.h
│ │ └── mysqrt.cpp
│ ├── TutorialConfig.h.in
│ └── tutorial.cpp
└── TutorialConfig.h
42 directories, 164 files
编译的过程
$make
Scanning dependencies of target MathFunctions
[ 50%] Building CXX object MathFunctions/CMakeFiles/MathFunctions.dir/mysqrt.cpp.o
Linking CXX static library libMathFunctions.a
[ 50%] Built target MathFunctions
Scanning dependencies of target Tutorial
[100%] Building CXX object CMakeFiles/Tutorial.dir/tutorial.cpp.o
Linking CXX executable Tutorial
[100%] Built target Tutorial
$tree . >tree.makelog
$cat tree.makelog
.
├── CMakeCache.txt
├── CMakeFiles
│ ├── CMakeCCompiler.cmake
│ ├── cmake.check_cache
│ ├── CMakeCXXCompiler.cmake
│ ├── CMakeDetermineCompilerABI_C.bin
│ ├── CMakeDetermineCompilerABI_CXX.bin
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeOutput.log
│ ├── CMakeRuleHashes.txt
│ ├── CMakeSystem.cmake
│ ├── CMakeTmp
│ │ └── CMakeFiles
│ │ └── cmTryCompileExec.dir
│ ├── CompilerIdC
│ │ ├── a.out
│ │ └── CMakeCCompilerId.c
│ ├── CompilerIdCXX
│ │ ├── a.out
│ │ └── CMakeCXXCompilerId.cpp
│ ├── ContinuousBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Continuous.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousSubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Experimental.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalSubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── NightlyBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Nightly.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyMemoryCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlySubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── progress.marks
│ ├── TargetDirectories.txt
│ └── Tutorial.dir
│ ├── build.make
│ ├── cmake_clean.cmake
│ ├── CXX.includecache
│ ├── DependInfo.cmake
│ ├── depend.internal
│ ├── depend.make
│ ├── flags.make
│ ├── link.txt
│ ├── progress.make
│ └── tutorial.cpp.o
├── cmake_install.cmake
├── CTestTestfile.cmake
├── DartConfiguration.tcl
├── Makefile
├── MathFunctions
│ ├── CMakeFiles
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── MathFunctions.dir
│ │ │ ├── build.make
│ │ │ ├── cmake_clean.cmake
│ │ │ ├── cmake_clean_target.cmake
│ │ │ ├── CXX.includecache
│ │ │ ├── DependInfo.cmake
│ │ │ ├── depend.internal
│ │ │ ├── depend.make
│ │ │ ├── flags.make
│ │ │ ├── link.txt
│ │ │ ├── mysqrt.cpp.o
│ │ │ └── progress.make
│ │ └── progress.marks
│ ├── cmake_install.cmake
│ ├── libMathFunctions.a
│ └── Makefile
├── Testing
│ └── Temporary
├── tree.cmakelog
├── tree.makelog
├── tree.origin
├── tree.testlog
├── tutorial
│ ├── CMakeLists.txt
│ ├── MathFunctions
│ │ ├── CMakeLists.txt
│ │ ├── MathFunctions.h
│ │ └── mysqrt.cpp
│ ├── TutorialConfig.h.in
│ └── tutorial.cpp
├── Tutorial
└── TutorialConfig.h
42 directories, 172 files
测试的过程
$ctest
Test project /home/miracle/mydata/orgmode/data/f80366ab-6a10-4de9-9793-3a531afbc192/cmake/3_test
Start 1: TutorialRuns
1/6 Test #1: TutorialRuns ..................... Passed 0.00 sec
Start 2: TutorialComp25
2/6 Test #2: TutorialComp25 ................... Passed 0.00 sec
Start 3: TutorialNegative
3/6 Test #3: TutorialNegative .................***Failed Required regular expression not found.Regex=[-25 is 0
] 0.00 sec
Start 4: TutorialSmall
4/6 Test #4: TutorialSmall .................... Passed 0.00 sec
Start 5: TutorialUsage
5/6 Test #5: TutorialUsage .................... Passed 0.00 sec
Start 6: TutorialComp-25
6/6 Test #6: TutorialComp-25 ..................***Failed Required regular expression not found.Regex=[-25 is 0
] 0.00 sec
67% tests passed, 2 tests failed out of 6
Total Test time (real) = 0.01 sec
The following tests FAILED:
3 - TutorialNegative (Failed)
6 - TutorialComp-25 (Failed)
Errors while running CTest
$tree . >tree.testlog
$cat tree.testlog
.
├── CMakeCache.txt
├── CMakeFiles
│ ├── CMakeCCompiler.cmake
│ ├── cmake.check_cache
│ ├── CMakeCXXCompiler.cmake
│ ├── CMakeDetermineCompilerABI_C.bin
│ ├── CMakeDetermineCompilerABI_CXX.bin
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeOutput.log
│ ├── CMakeRuleHashes.txt
│ ├── CMakeSystem.cmake
│ ├── CMakeTmp
│ │ └── CMakeFiles
│ │ └── cmTryCompileExec.dir
│ ├── CompilerIdC
│ │ ├── a.out
│ │ └── CMakeCCompilerId.c
│ ├── CompilerIdCXX
│ │ ├── a.out
│ │ └── CMakeCXXCompilerId.cpp
│ ├── ContinuousBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Continuous.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousSubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ContinuousUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Experimental.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalSubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── ExperimentalUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── NightlyBuild.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyConfigure.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyCoverage.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── Nightly.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyMemCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyMemoryCheck.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyStart.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlySubmit.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyTest.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── NightlyUpdate.dir
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ └── progress.make
│ ├── progress.marks
│ ├── TargetDirectories.txt
│ └── Tutorial.dir
│ ├── build.make
│ ├── cmake_clean.cmake
│ ├── CXX.includecache
│ ├── DependInfo.cmake
│ ├── depend.internal
│ ├── depend.make
│ ├── flags.make
│ ├── link.txt
│ ├── progress.make
│ └── tutorial.cpp.o
├── cmake_install.cmake
├── CTestTestfile.cmake
├── DartConfiguration.tcl
├── Makefile
├── MathFunctions
│ ├── CMakeFiles
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── MathFunctions.dir
│ │ │ ├── build.make
│ │ │ ├── cmake_clean.cmake
│ │ │ ├── cmake_clean_target.cmake
│ │ │ ├── CXX.includecache
│ │ │ ├── DependInfo.cmake
│ │ │ ├── depend.internal
│ │ │ ├── depend.make
│ │ │ ├── flags.make
│ │ │ ├── link.txt
│ │ │ ├── mysqrt.cpp.o
│ │ │ └── progress.make
│ │ └── progress.marks
│ ├── cmake_install.cmake
│ ├── libMathFunctions.a
│ └── Makefile
├── Testing
│ └── Temporary
│ ├── CTestCostData.txt
│ ├── LastTest.log
│ └── LastTestsFailed.log
├── tree.cmakelog
├── tree.makelog
├── tree.origin
├── tree.testlog
├── tutorial
│ ├── CMakeLists.txt
│ ├── MathFunctions
│ │ ├── CMakeLists.txt
│ │ ├── MathFunctions.h
│ │ └── mysqrt.cpp
│ ├── TutorialConfig.h.in
│ └── tutorial.cpp
├── Tutorial
└── TutorialConfig.h
42 directories, 175 files
常用命令
$ mkdir build && cd build
$ cmake ../tutorial
$ make
$ ctest
Test project /home/miracle/study/cmake/3_test/build
Start 1: TutorialRuns
1/4 Test #1: TutorialRuns ..................... Passed 0.00 sec
Start 2: TutorialUsage
2/4 Test #2: TutorialUsage .................... Passed 0.00 sec
Start 3: TutorialComp25
3/4 Test #3: TutorialComp25 ...................***Failed Required regular expression not found.Regex=[25 is 5
] 0.00 sec
Start 4: TutorialComp-25
4/4 Test #4: TutorialComp-25 .................. Passed 0.00 sec
75% tests passed, 1 tests failed out of 4
Total Test time (real) = 0.01 sec
The following tests FAILED:
3 - TutorialComp25 (Failed)
Errors while running CTest
网友评论