diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..b2dc28e
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.9)
+project(MyProject)
+
+set(CMAKE_CXX_STANDARD 17)
+
+set(SOURCE_FILES main.cpp)
+add_executable(${CMAKE_PROJECT_NAME}_run ${SOURCE_FILES})
+
+include_directories(src)
+
+add_subdirectory(src)
+
+target_link_libraries(${CMAKE_PROJECT_NAME}_run ${CMAKE_PROJECT_NAME}_lib)
\ No newline at end of file
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..d269c89
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,3 @@
+int main() {
+  return 0;
+}
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..94717aa
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,17 @@
+project(${CMAKE_PROJECT_NAME}_lib)
+
+set(HEADER_FILES
+)
+set(SOURCE_FILES
+)
+
+if (EXISTS ${SOURCE_FILES})
+    # The library contains header and source files.
+    add_library(${CMAKE_PROJECT_NAME}_lib STATIC
+        ${SOURCE_FILES}
+        ${HEADER_FILES}
+    )
+else()
+    # The library only contains header files.
+    add_library(${CMAKE_PROJECT_NAME}_lib INTERFACE)
+endif()
\ No newline at end of file