# ! ------------------------------------------------------------------ ! # ! Changing this file incorrectly can cause your program to not build ! # ! If you don't know CMake well DO NOT touch this file ! # ! ------------------------------------------------------------------ ! cmake_minimum_required(VERSION 3.20) project(OOP VERSION 0.1.0) enable_testing() set(CMAKE_CXX_STANDARD 17) #### GTest option(FETCH_GOOGLETEST "Download googletest source" ON) if(FETCH_GOOGLETEST) # reference: https://google.github.io/googletest/quickstart-cmake.html include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.12.1 ) # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) else() message("Using custom googletest installation") # reference: https://cmake.org/cmake/help/latest/module/FindGTest.html find_package(GTest REQUIRED) endif() include(files.cmake) set(SRC_DIR ${CMAKE_SOURCE_DIR}/src) set(INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) set(TEST_DIR ${CMAKE_SOURCE_DIR}/test) list(TRANSFORM SRC_FILES PREPEND ${SRC_DIR}/) list(TRANSFORM INCLUDE_FILES PREPEND ${INCLUDE_DIR}/) list(TRANSFORM TEST_FILES PREPEND ${TEST_DIR}/) find_program(MEMORYCHECK_COMMAND valgrind) set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --track-origins=yes --leak-check=full" ) include(CTest) option(COVERAGE "Enable coverage" OFF) if(COVERAGE) set(CMAKE_C_FLAGS "--coverage -g -O0") set(CMAKE_CXX_FLAGS "--coverage -g -O0") include(scripts/CodeCoverage.cmake) set(CODE_COVERAGE_VERBOSE ON) set(COVERAGE_EXCLUDE ${CMAKE_BINARY_DIR}/_deps/* ${PROJECT_SOURCE_DIR}/test/* ) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(GCOVR_ADDITIONAL_ARGS --gcov-executable "llvm-cov gcov" ) endif() append_coverage_compiler_flags() setup_target_for_coverage_gcovr_html( NAME ut_all_coverage DEPENDENCIES ut_all EXCLUDE ${COVERAGE_EXCLUDE} ) endif() if(MSVC) set(TARGET_COMPILER_OPTIONS /W4 ) else() set(TARGET_COMPILER_OPTIONS -Wall -pedantic ) endif() add_executable(ut_test_1 include/MainDish.hpp include/SideDish.hpp include/Drink.hpp include/Food.hpp src/MainDish.cpp src/SideDish.cpp src/Drink.cpp src/Food.cpp test/ut_Food.cpp ) add_executable(ut_test_2 include/Package.hpp include/MainDish.hpp include/SideDish.hpp include/Drink.hpp include/Food.hpp src/Package.cpp src/MainDish.cpp src/SideDish.cpp src/Drink.cpp src/Food.cpp test/ut_Package.cpp test/ut_Food.cpp ) add_executable(ut_all ${SRC_FILES} ${INCLUDE_FILES} ${TEST_FILES} ) target_link_libraries(ut_test_1 GTest::gtest_main ) target_include_directories(ut_test_1 PRIVATE ${INCLUDE_DIR} ) target_compile_options(ut_test_1 PRIVATE ${TARGET_COMPILER_OPTIONS} ) target_link_libraries(ut_test_2 GTest::gtest_main ) target_include_directories(ut_test_2 PRIVATE ${INCLUDE_DIR} ) target_compile_options(ut_test_2 PRIVATE ${TARGET_COMPILER_OPTIONS} ) target_link_libraries(ut_all GTest::gtest_main ) target_include_directories(ut_all PRIVATE ${INCLUDE_DIR} ) target_compile_options(ut_all PRIVATE ${TARGET_COMPILER_OPTIONS} ) include(GoogleTest) gtest_discover_tests(ut_all)