版权声明:本文为aggresss原创文章,未经博主允许不得转载。 作者:[email protected] https://blog.csdn.net/aggresss/article/details/87871483
Go语言原生支持单元测试,而且使用起来非常方便。用 CMake 也可以将 C工程的单元测试自动组织起来自动编译单元测试。下面是子目录的 CMake 实现,仅供参考。
# ------------------------------------------------------------------------------
# CMakeLists.txt for aggresss/deps subdirectory
# ------------------------------------------------------------------------------
string(REGEX MATCH "[^/]+$" SUBMODULE ${CMAKE_CURRENT_LIST_DIR})
option(${SUBMODULE} "Build ${SUBMODULE}" OFF)
file(GLOB SRCS_TEST RELATIVE ${CMAKE_CURRENT_LIST_DIR} *_test.c)
if(SRCS_TEST)
file(GLOB SRCS_COMMON RELATIVE ${CMAKE_CURRENT_LIST_DIR} *.c)
list(REMOVE_ITEM SRCS_COMMON ${SRCS_TEST})
if(${SUBMODULE} OR BUILD_ALL)
foreach(test_file ${SRCS_TEST})
get_filename_component(test_case ${test_file} NAME_WE)
# Build
add_executable(${SUBMODULE}_${test_case} ${SRCS_COMMON} ${test_file})
target_compile_options(${SUBMODULE}_${test_case} PRIVATE -std=c99)
# Test
add_test(NAME ${SUBMODULE}_${test_case} COMMAND ${SUBMODULE}_${test_case})
endforeach()
endif()
endif()
具体使用方法可以参考这个链接 https://github.com/aggresss/deps/blob/master/.travis.yml
cmake . -DBUILD_ALL=ON -DCMAKE_BUILD_TYPE:String="Coverage"
make
ctest -T Test -VV
ctest -T MemCheck -VV
cat Testing/Temporary/MemoryChecker.*.log || exit 0
ctest -T Coverage -V