diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 7265bcf..b9a1349 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -20,7 +20,7 @@ jobs: - name: run cmake working-directory: ${{github.workspace}}/ - run: cmake -B./build . + run: cmake -B./build -DBUILD_TESTING=ON . - name: make working-directory: ${{github.workspace}}/build diff --git a/.gitignore b/.gitignore index 74fca05..0260f71 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,9 @@ _deps .cache/* .vscode/* build/* +cmake-build-debug/* +.idea/ # Allow expected outputs for tests to be committed !**/tests/*.out -!**/tests/**/*.out \ No newline at end of file +!**/tests/**/*.out diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fc41d1..894754e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,54 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) -project(homeworks) +project(homeworks LANGUAGES CXX) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib) +option(BUILD_SANDBOX "Build sandbox targets" OFF) +option(BUILD_ADDITIONAL_TASKS "Build additional tasks" OFF) +set(BUILD_TASK "" CACHE STRING "Build only one task, for example task_07") -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sandbox) +set(HOMEWORK_TASKS + task_01 + task_02 + task_03 + task_04 + task_05 + task_06 + task_07 + task_08 + task_09 + task_10 + task_11 + task_12 + task_13 + task_14) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/additional_tasks) +list(FIND HOMEWORK_TASKS "${BUILD_TASK}" build_task_index) -file(GLOB_RECURSE tasks_dirs LIST_DIRECTORIES true ".") +if(BUILD_TASK AND build_task_index EQUAL -1) + message(FATAL_ERROR "Unknown BUILD_TASK='${BUILD_TASK}'. Expected one of: ${HOMEWORK_TASKS}") +endif() -foreach(dir ${tasks_dirs}) - IF(IS_DIRECTORY ${dir}) - IF(${dir} MATCHES "task_[0-9][0-9]$" AND NOT ${dir} MATCHES "build") - add_subdirectory(${dir}) - ENDIF() - ELSE() - CONTINUE() - ENDIF() -endforeach() +add_subdirectory(lib) + +include(CTest) + +if(BUILD_TESTING) + find_package(GTest REQUIRED) + include(GoogleTest) +endif() + +if(BUILD_TASK) + add_subdirectory(${BUILD_TASK}) +else() + foreach(task IN LISTS HOMEWORK_TASKS) + add_subdirectory(${task}) + endforeach() + + if(BUILD_SANDBOX) + add_subdirectory(sandbox) + endif() + + if(BUILD_ADDITIONAL_TASKS) + add_subdirectory(additional_tasks) + endif() +endif() diff --git a/README.md b/README.md index 7b9614b..c85227e 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ ### Советы при работе с codespaces * При работе с заданиями желательно создавать файлы .hpp и .cpp с заданием, причем .hpp - именно заголовочный файл, который будет импортироваться вами в test.cpp для тестирования +* Если вы добавили в `src` отдельный файл с реализацией (например, `algo.cpp`), не забудьте дописать его в `SOURCES` и, при необходимости, в `TEST_SOURCES` внутри `task_N/CMakeLists.txt`. Иначе проект может сконфигурироваться, но упасть на этапе линковки из-за “undefined reference” * Если вы работаете через VS Code, то чтобы поменять цель сборки, нажмите Ctrl+p, и введите **>CMake: Set Launch/Debug Target** * Если при запуске тестов консоль остается пустой, проверьте что int main() внутри main.cpp соответствующего задания пуст * Если вся среда неожиданно зависла и очень долго пытается соединиться с сервером - попробуйте выключить интернет на 10 секунд и включить снова. Если не помогает - ищите более надежную сеть( diff --git a/additional_tasks/CMakeLists.txt b/additional_tasks/CMakeLists.txt index 0b5cd69..28c5893 100644 --- a/additional_tasks/CMakeLists.txt +++ b/additional_tasks/CMakeLists.txt @@ -2,14 +2,11 @@ cmake_minimum_required(VERSION 3.10) project(additional_tasks) -file(GLOB_RECURSE tasks_dirs LIST_DIRECTORIES true ".") +file(GLOB additional_entries RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*") -foreach(dir ${tasks_dirs}) - IF(IS_DIRECTORY ${dir}) - IF(NOT ${dir} MATCHES ".*src.*") - add_subdirectory(${dir}) - ENDIF() - ELSE() - CONTINUE() - ENDIF() -endforeach() \ No newline at end of file +foreach(entry ${additional_entries}) + if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${entry}" AND + EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${entry}/CMakeLists.txt") + add_subdirectory(${entry}) + endif() +endforeach() diff --git a/cmake/AddHomeworkTask.cmake b/cmake/AddHomeworkTask.cmake new file mode 100644 index 0000000..7857cd4 --- /dev/null +++ b/cmake/AddHomeworkTask.cmake @@ -0,0 +1,37 @@ +function(add_homework_task) + set(options) + set(one_value_args NAME) + set(multi_value_args SOURCES TEST_SOURCES INCLUDE_DIRS) + cmake_parse_arguments(TASK "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN}) + + if(NOT TASK_NAME) + message(FATAL_ERROR "add_homework_task requires NAME") + endif() + + if(NOT TASK_SOURCES) + message(FATAL_ERROR "add_homework_task(${TASK_NAME}) requires SOURCES") + endif() + + add_executable(${TASK_NAME} ${TASK_SOURCES}) + target_compile_features(${TASK_NAME} PRIVATE cxx_std_23) + target_include_directories( + ${TASK_NAME} + PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/src" + ${TASK_INCLUDE_DIRS} + ) + target_link_libraries(${TASK_NAME} PRIVATE Utils) + + if(BUILD_TESTING AND TASK_TEST_SOURCES) + add_executable(${TASK_NAME}_tests ${TASK_TEST_SOURCES}) + target_compile_features(${TASK_NAME}_tests PRIVATE cxx_std_23) + target_include_directories( + ${TASK_NAME}_tests + PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/src" + ${TASK_INCLUDE_DIRS} + ) + target_link_libraries(${TASK_NAME}_tests PRIVATE GTest::gtest_main Utils) + gtest_discover_tests(${TASK_NAME}_tests) + endif() +endfunction() diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 71a6384..9a554c6 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,10 +1,6 @@ -cmake_minimum_required(VERSION 3.10) -project(Utils) +add_library(Utils + src/util.cpp +) -set(CMAKE_CXX_STANDARD 23) - -file(GLOB_RECURSE lib_source_list "src/*.cpp" "src/*.hpp") - -add_library(${PROJECT_NAME} ${lib_source_list}) - -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) \ No newline at end of file +target_compile_features(Utils PUBLIC cxx_std_23) +target_include_directories(Utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) diff --git a/sandbox/CMakeLists.txt b/sandbox/CMakeLists.txt index 4205f82..8a5dd1e 100644 --- a/sandbox/CMakeLists.txt +++ b/sandbox/CMakeLists.txt @@ -2,14 +2,11 @@ cmake_minimum_required(VERSION 3.10) project(sendbox) -file(GLOB_RECURSE tasks_dirs LIST_DIRECTORIES true ".") +file(GLOB sandbox_entries RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*") -foreach(dir ${tasks_dirs}) - IF(IS_DIRECTORY ${dir}) - IF(NOT ${dir} MATCHES ".*src.*" AND NOT ${dir} MATCHES ".*tests.*") - IF(EXISTS ${dir}/CMakeLists.txt) - add_subdirectory(${dir}) - ENDIF() - ENDIF() - ENDIF() -endforeach() \ No newline at end of file +foreach(entry ${sandbox_entries}) + if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${entry}" AND + EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${entry}/CMakeLists.txt") + add_subdirectory(${entry}) + endif() +endforeach() diff --git a/task_01/CMakeLists.txt b/task_01/CMakeLists.txt index 511e893..af6b430 100644 --- a/task_01/CMakeLists.txt +++ b/task_01/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_01 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_02/CMakeLists.txt b/task_02/CMakeLists.txt index 511e893..34f6700 100644 --- a/task_02/CMakeLists.txt +++ b/task_02/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_02 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_03/CMakeLists.txt b/task_03/CMakeLists.txt index 511e893..015ff50 100644 --- a/task_03/CMakeLists.txt +++ b/task_03/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_03 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_04/CMakeLists.txt b/task_04/CMakeLists.txt index 511e893..69c168e 100644 --- a/task_04/CMakeLists.txt +++ b/task_04/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +add_homework_task( + NAME task_04 + SOURCES + src/main.cpp + src/stack.cpp + TEST_SOURCES + src/stack.cpp + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_05/CMakeLists.txt b/task_05/CMakeLists.txt index 511e893..eeb9187 100644 --- a/task_05/CMakeLists.txt +++ b/task_05/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +add_homework_task( + NAME task_05 + SOURCES + src/main.cpp + src/topology_sort.cpp + TEST_SOURCES + src/test.cpp + src/topology_sort.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_06/CMakeLists.txt b/task_06/CMakeLists.txt index 511e893..a3bf69f 100644 --- a/task_06/CMakeLists.txt +++ b/task_06/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_06 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_07/CMakeLists.txt b/task_07/CMakeLists.txt index 511e893..ae8203f 100644 --- a/task_07/CMakeLists.txt +++ b/task_07/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_07 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_08/CMakeLists.txt b/task_08/CMakeLists.txt index 511e893..b926d70 100644 --- a/task_08/CMakeLists.txt +++ b/task_08/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_08 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_09/CMakeLists.txt b/task_09/CMakeLists.txt index 511e893..a0e719a 100644 --- a/task_09/CMakeLists.txt +++ b/task_09/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_09 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_10/CMakeLists.txt b/task_10/CMakeLists.txt index 511e893..43ec666 100644 --- a/task_10/CMakeLists.txt +++ b/task_10/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_10 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_11/CMakeLists.txt b/task_11/CMakeLists.txt index 511e893..d18241a 100644 --- a/task_11/CMakeLists.txt +++ b/task_11/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_11 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_12/CMakeLists.txt b/task_12/CMakeLists.txt index 511e893..da02df0 100644 --- a/task_12/CMakeLists.txt +++ b/task_12/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_12 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_13/CMakeLists.txt b/task_13/CMakeLists.txt index 511e893..6e0516f 100644 --- a/task_13/CMakeLists.txt +++ b/task_13/CMakeLists.txt @@ -1,40 +1,11 @@ - -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) - -include_directories(${GTEST_INCLUDE_DIRS}) - -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_13 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_14/CMakeLists.txt b/task_14/CMakeLists.txt index fb990c2..bbb6014 100644 --- a/task_14/CMakeLists.txt +++ b/task_14/CMakeLists.txt @@ -1,37 +1,11 @@ -cmake_minimum_required(VERSION 3.10) - -get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) -project(${PROJECT_NAME} C CXX) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") -file(GLOB_RECURSE main_source_list "src/main.cpp") -file(GLOB_RECURSE test_source_list "src/*.cpp") -file(GLOB_RECURSE test_list "src/*test.cpp") - -list(REMOVE_ITEM test_source_list ${main_source_list}) -list(REMOVE_ITEM source_list ${test_list}) - -include_directories(${PROJECT_NAME} PUBLIC src) - -add_executable(${PROJECT_NAME} ${source_list}) -target_link_libraries(${PROJECT_NAME} PUBLIC Utils) - -# Locate GTest -enable_testing() -find_package(GTest REQUIRED) -include_directories(${GTEST_INCLUDE_DIRS}) - -# Link runTests with what we want to test and the GTest and pthread library -add_executable(${PROJECT_NAME}_tests ${test_source_list}) -target_link_libraries( - ${PROJECT_NAME}_tests - GTest::gtest_main - Utils +include(${CMAKE_SOURCE_DIR}/cmake/AddHomeworkTask.cmake) + +# If you add extra implementation files in src/, list them in SOURCES and +# TEST_SOURCES explicitly. CMake will not pick new .cpp files automatically. +add_homework_task( + NAME task_14 + SOURCES + src/main.cpp + TEST_SOURCES + src/test.cpp ) - -include(GoogleTest) -gtest_discover_tests(${PROJECT_NAME}_tests)