ccmakecmocka

How to disable CMocka's internal tests when using FetchContent in CMake?


I'm integrating CMocka into my C library project using FetchContent in CMake.

cmake_minimum_required(VERSION 3.31)
project(mylib C)

set(CMAKE_C_STANDARD 11)

add_library(mylib STATIC src/library.c)
target_include_directories(mylib PUBLIC include)

# Download CMocka
include(FetchContent)
FetchContent_Declare(
        cmocka
        GIT_REPOSITORY https://git.cryptomilk.org/projects/cmocka.git
        GIT_TAG        cmocka-1.1.5
)
set(CMOCKA_TESTS OFF CACHE BOOL "Disable CMocka self-tests")
FetchContent_MakeAvailable(cmocka)
add_library(cmocka::cmocka ALIAS cmocka)

# Add test
enable_testing()

add_executable(mylib_test test/mylib_test.c)
target_link_libraries(mylib_test PRIVATE mylib cmocka::cmocka)

add_test(NAME MyLibTests COMMAND mylib_test)

My test executable is working fine, but when I run ctest, I see extra tests like:

Start 1: MyLibTests
Start 2: simple_test
Start 3: allocate_module_test
Start 4: assert_macro_test
Start 5: assert_module_test

The additional ones (simple_test, assert_module_test, etc.) are not from my code — they appear to be from CMocka itself

Question

How do I prevent CMocka’s own internal tests from being built and registered with CTest when using FetchContent_MakeAvailable?

What I’ve tried:

I tried to switch them off as well without success.

set(CMOCKA_TESTS OFF CACHE BOOL "Disable CMocka self-tests")

Goal:

Only my own tests should appear in ctest, not CMocka’s internal ones.


Solution

  • Instead of the following line on your CMakeLists.txt :

    set(CMOCKA_TESTS OFF CACHE BOOL "Disable CMocka self-tests")
    

    You need to use this one :

    set(WITH_EXAMPLES OFF CACHE BOOL "")
    

    CMake options defined for cmocka are on the file DefineOptions.cmake (like this for the version 1.1.5) :

    option(WITH_STATIC_LIB "Build with a static library" OFF)
    option(WITH_CMOCKERY_SUPPORT "Install a cmockery header" OFF)
    option(WITH_EXAMPLES "Build examples" ON)
    option(UNIT_TESTING "Build with unit testing" OFF)
    option(PICKY_DEVELOPER "Build with picky developer flags" OFF)
    
    if (WITH_STATIC_LIB)
        set(BUILD_STATIC_LIB ON)
    endif (WITH_STATIC_LIB)
    
    if (UNIT_TESTING)
      set(BUILD_STATIC_LIB ON)
    endif (UNIT_TESTING)
    

    So, if you don't defined WITH_EXAMPLES, the default value is to ON.

    You can also passed the argument on the command line like this :

    cmake -B build -DWITH_EXAMPLES=OFF