diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..564598d2947686fe6ca5c9f542b539e694047d10
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,95 @@
+cmake_minimum_required(VERSION 3.14)
+project(exple_cmake_build CXX)
+
+option(DOWNLOAD_DEPS ON)
+
+# download dependency 'explelibx_common' or find it locally
+if (DOWNLOAD_DEPS)
+  include(FetchContent)
+  FetchContent_Declare(
+    explelibx_common
+    GIT_REPOSITORY http://tesla.parallel.ru/vonopr/explelibx-common.git
+    GIT_TAG e45b60782a6414125c7300d9b7a77d34a8404d6e)
+  FetchContent_MakeAvailable(explelibx_common)
+  set(COMMON_DIR "${explelibx_common_SOURCE_DIR}")
+else()
+  if (NOT DEFINED COMMON_DIR)
+    file(REAL_PATH "${PROJECT_SOURCE_DIR}/../../explelibx-common" COMMON_DIR)
+  endif()
+  if (NOT EXISTS ${COMMON_DIR})
+    message(WARNING "Failed to locate 'explelibx-common' project. Variable COMMON_DIR points to non-existent directory.\
+    Set COMMON_DIR to point a valid directory or enable dependencies download with '-DDOWNLOAD_DEPS=ON' (e.g. cmake . -DDOWNLOAD_DEPS=ON)")
+  endif()
+  message("-- Path to 'explelibx-common' project")
+  message("    COMMON_DIR: ${COMMON_DIR}")
+endif()
+
+# download dependency 'explelibx_mgrid' or find it locally
+if (DOWNLOAD_DEPS)
+  include(FetchContent)
+  FetchContent_Declare(
+    explelibx_mgrid
+    GIT_REPOSITORY http://tesla.parallel.ru/vonopr/explelibx-mgrid.git
+    GIT_TAG c345859b9ebca2227e3b3faea4cc2380fdbb054f)
+  FetchContent_MakeAvailable(explelibx_mgrid)
+  set(GRID_DIR "${explelibx_mgrid_SOURCE_DIR}")
+else()
+  if (NOT DEFINED GRID_DIR)
+    file(REAL_PATH "${PROJECT_SOURCE_DIR}/../../explelibx-mgrid" GRID_DIR)
+  endif()
+  if (NOT EXISTS ${GRID_DIR})
+    message(WARNING "Failed to locate 'explelibx-mgrid' project. Variable GRID_DIR points to non-existent directory.\
+    Set GRID_DIR to point a valid directory or enable dependencies download with '-DDOWNLOAD_DEPS=ON' (e.g. cmake . -DDOWNLOAD_DEPS=ON)")
+  endif()
+  message("-- Path to 'explelibx-mgrid' project")
+  message("    GRID_DIR: ${GRID_DIR}")
+endif()
+
+# set paths to 'explelibx-common' sources
+set(COMMON_SOURCE_DIR "${COMMON_DIR}/explelibx-common")
+set(COMMON_HEADER_DIR "${COMMON_DIR}/explelibx-common")
+set(COMMON_SOURCES exple-add.cpp)
+set(COMMON_HEADERS exple-add.h)
+list(TRANSFORM COMMON_SOURCES PREPEND "${COMMON_SOURCE_DIR}/")
+list(TRANSFORM COMMON_HEADERS PREPEND "${COMMON_HEADER_DIR}/")
+
+# set paths to 'explelibx-mgrid' sources
+set(GRID_SOURCE_DIR "${GRID_DIR}/explelibx-mgrid")
+set(GRID_HEADER_DIR "${GRID_DIR}/explelibx-mgrid")
+set(GRID_SOURCES exple-mul.cpp)
+set(GRID_HEADERS exple-mul.h)
+list(TRANSFORM GRID_SOURCES PREPEND "${GRID_SOURCE_DIR}/")
+list(TRANSFORM GRID_HEADERS PREPEND "${GRID_HEADER_DIR}/")
+
+# set paths to current project's sources
+set(SOURCE_DIR "${PROJECT_SOURCE_DIR}/exple-cmake-build")
+set(HEADER_DIR "${PROJECT_SOURCE_DIR}/exple-cmake-build")
+set(CURRENT_SOURCES main.cpp)
+set(CURRENT_HEADERS exple-expr.hpp)
+list(TRANSFORM CURRENT_SOURCES PREPEND "${SOURCE_DIR}/")
+list(TRANSFORM CURRENT_HEADERS PREPEND "${HEADER_DIR}/")
+
+# set targets
+add_executable(exple_add_numbers
+  "${CURRENT_SOURCES}" 
+  "${CURRENT_HEADERS}"
+  "${COMMON_SOURCES}" 
+  "${COMMON_HEADERS}" 
+  "${GRID_SOURCES}"
+  "${GRID_HEADERS}")  # headers should be explicitly added to the target to be shown in IDEs after mentioned in source_group()
+                     # if using Visual Studio switch to project's target representation
+set_property(TARGET exple_add_numbers PROPERTY OUTPUT_NAME  "exple-add-numbers")
+
+target_include_directories(exple_add_numbers PRIVATE
+  "${HEADER_DIR}"
+  "${COMMON_HEADER_DIR}"
+  "${GRID_HEADER_DIR}")
+
+
+# set groups for better source representation in IDEs
+source_group("Common\\Sources" FILES "${COMMON_SOURCES}")
+source_group("Common\\Headers" FILES "${COMMON_HEADERS}")
+source_group("Grid\\Sources" FILES "${GRID_SOURCES}")
+source_group("Grid\\Headers" FILES "${GRID_HEADERS}")
+source_group("CMake-Build\\Sources" FILES "${CURRENT_SOURCES}")
+source_group("CMake-Build\\Headers" FILES "${CURRENT_HEADERS}")