I have this simplified file structure:
Component
|----hdr/
|-------sut.h
|----src/
|-------sut.c
|---test/
|-------TestMain.cpp
|-------CMakeLists.txt
|-------build/
Now my TestMain.cpp
includes sut.h
(subject under test) and performs function calls to functions declared in sut.h
.
This is my CMakeLists.txt file:
cmake_minimum_required(VERSION 3.24)
project(CppTest)
set(PROJECT_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/../../../Common/common/src/file.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/sut.c
)
# GoogleTest requires at least C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
#set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
add_executable(CppTest ${CMAKE_CURRENT_SOURCE_DIR}/TestMain.cpp)
target_sources(CppTest PUBLIC ${PROJECT_SOURCES})
target_include_directories(CppTest
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../hdr # include sut.h
${CMAKE_CURRENT_SOURCE_DIR}/../../../Database/hdr/ # needed for sut.c
${CMAKE_CURRENT_SOURCE_DIR}/../../../Common/common/hdr/ # needed for sut.c
)
target_link_libraries(CppTest GTest::gtest_main)
Now everything compiles fine, however I get a linker error that a function defined in sut.h
and used in TestMain.cpp
has an undefined reference. But I added its source sut.c
in PROJECT_SOURCES
so sut.c
should be linked to TestMain.cpp
– right?
What am I doing wrong here?