diff options
| author | y-jan137 <yousefjan24000@gmail.com> | 2026-03-12 15:01:35 +0300 |
|---|---|---|
| committer | y-jan137 <yousefjan24000@gmail.com> | 2026-03-12 15:01:35 +0300 |
| commit | 8ac4d298a209a2b381f203c2b63e59ace9736846 (patch) | |
| tree | fb1fbda3739afb60f76dd4bb48241957a5a3baa0 /CMakeLists.txt | |
| parent | bfd7f0d6a9f81e093a390be968058732cc7562c6 (diff) | |
Add matrix, vector classes and tests
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d38773b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 3.20) + +project(linear_algebra_cpp VERSION 0.1.0 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +option(LINEAR_ALGEBRA_BUILD_TESTS "Build unit tests" ON) +option(LINEAR_ALGEBRA_BUILD_EXAMPLES "Build example programs" ON) + +add_library(linear_algebra + src/vector.cpp + src/matrix.cpp +) + +add_library(linear_algebra::core ALIAS linear_algebra) + +target_include_directories(linear_algebra + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + +target_compile_features(linear_algebra PUBLIC cxx_std_20) + +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + target_compile_options(linear_algebra PRIVATE -Wall -Wextra -Wpedantic -Wconversion) +elseif(MSVC) + target_compile_options(linear_algebra PRIVATE /W4 /permissive-) +endif() + +if(LINEAR_ALGEBRA_BUILD_EXAMPLES) + add_executable(solve_linear_system examples/solve_linear_system.cpp) + target_link_libraries(solve_linear_system PRIVATE linear_algebra::core) +endif() + +if(LINEAR_ALGEBRA_BUILD_TESTS) + include(FetchContent) + + FetchContent_Declare( + Catch2 + GIT_REPOSITORY https://github.com/catchorg/Catch2.git + GIT_TAG v3.5.4 + ) + + FetchContent_MakeAvailable(Catch2) + + enable_testing() + + add_executable(linear_algebra_tests + tests/test_vector.cpp + tests/test_matrix.cpp + ) + + target_link_libraries(linear_algebra_tests + PRIVATE + linear_algebra::core + Catch2::Catch2WithMain + ) + + include(Catch) + catch_discover_tests(linear_algebra_tests) +endif() |