測試
相關代碼: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