cmake_minimum_required(VERSION 3.10) if(${CMAKE_VERSION} VERSION_LESS 3.10) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) endif() # project information project(unit_tests VERSION 0.1 DESCRIPTION "Unit tests for C project" LANGUAGES C) # guard against bad build-type strings if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug") endif() include(CTest) ENABLE_TESTING() # specify C standard set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED True) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -pedantic -g -O0 --coverage") set(GCC_COVERAGE_LINK_FLAGS "--coverage -lgcov") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") # guard against in-source builds if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ") endif() # Fetch cmocka find_package(cmocka QUIET) include(FetchContent) FetchContent_Declare( cmocka GIT_REPOSITORY https://git.cryptomilk.org/projects/cmocka.git GIT_TAG cmocka-1.1.5 GIT_SHALLOW 1 ) set(WITH_STATIC_LIB ON CACHE BOOL "CMocka: Build with a static library" FORCE) set(WITH_CMOCKERY_SUPPORT OFF CACHE BOOL "CMocka: Install a cmockery header" FORCE) set(WITH_EXAMPLES OFF CACHE BOOL "CMocka: Build examples" FORCE) set(UNIT_TESTING OFF CACHE BOOL "CMocka: Build with unit testing" FORCE) set(PICKY_DEVELOPER OFF CACHE BOOL "CMocka: Build with picky developer flags" FORCE) FetchContent_MakeAvailable(cmocka) add_compile_definitions(TEST DEBUG=0 SKIP_FOR_CMOCKA) include_directories(../../src/) # add cmocka tests add_executable(test_demo tests/demo.c) # add src add_library(demo SHARED ./demo_tu.c) target_link_libraries(test_demo PUBLIC cmocka gcov demo) add_test(test_demo test_demo)