Make building shaders, VMA example application and VMA replay app optional
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4537e13..da7e883 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,4 +9,9 @@
 # Put binaries into bin folder
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
 
+# VulkanMemoryAllocator contains an example application and VmaReplay which are not build by default
+option(VMA_BUILD_EXAMPLE_APP "Build VulkanMemoryAllocator example application" OFF)
+option(VMA_BUILD_EXAMPLE_APP_SHADERS "Build VulkanMemoryAllocator example application's shaders" OFF)
+option(VMA_BUILD_REPLAY_APP "Build VulkanMemoryAllocator replay application" OFF)
+
 add_subdirectory(src)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aea26cf..228d86e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,5 +1,10 @@
-add_subdirectory(Shaders)
-add_subdirectory(VmaReplay)
+if(VMA_BUILD_EXAMPLE_APP_SHADERS)
+    add_subdirectory(Shaders)
+endif()
+
+if(VMA_BUILD_REPLAY_APP)
+    add_subdirectory(VmaReplay)
+endif()
 
 set(VMA_LIBRARY_SOURCE_FILES
     VmaUsage.cpp
@@ -20,10 +25,10 @@
     source_group("${GROUP}" FILES "${FILE}")
 endforeach()
 
-add_library(VmaLibrary ${VMA_LIBRARY_SOURCE_FILES})
+add_library(VulkanMemoryAllocator ${VMA_LIBRARY_SOURCE_FILES})
 
 set_target_properties(
-    VmaLibrary PROPERTIES
+    VulkanMemoryAllocator PROPERTIES
 
     CXX_EXTENSIONS OFF
     # Use C++14
@@ -32,14 +37,14 @@
 )
 
 target_include_directories(
-    VmaLibrary
+    VulkanMemoryAllocator
 
     PUBLIC
     ${PROJECT_SOURCE_DIR}/include
 )
 
 target_link_libraries(
-    VmaLibrary
+    VulkanMemoryAllocator
 
     PUBLIC
     Vulkan::Vulkan
@@ -67,46 +72,44 @@
     source_group("${GROUP}" FILES "${FILE}")
 endforeach()
 
-IF (WIN32)
-    add_executable(VmaExample ${VMA_EXAMPLE_SOURCE_FILES})
+if (VMA_BUILD_EXAMPLE_APP)
+    if(WIN32)
+        add_executable(VmaExample ${VMA_EXAMPLE_SOURCE_FILES})
 
-    # Make sure to compile shaders when compiling the example
-    add_dependencies(VmaExample VmaShaders)
+        # Visual Studio specific settings
+        if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
+            # Use Unicode instead of multibyte set
+            add_definitions(-DUNICODE -D_UNICODE)
+            
+            # Set VmaExample as startup project
+            set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT "VmaExample")
+            
+            # Enable multithreaded compiling
+            target_compile_options(VmaExample PRIVATE "/MP")
 
-    # Visual Studio specific settings
-    if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*")
-        # Use Unicode instead of multibyte set
-        add_definitions(-DUNICODE -D_UNICODE)
-        
-        # Set VmaExample as startup project
-        set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT "VmaExample")
-        
-        # Enable multithreaded compiling
-        target_compile_options(VmaExample PRIVATE "/MP")
+            # Set working directory for Visual Studio debugger
+            set_target_properties(
+                VmaExample
+                PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
+            )
+        endif()
 
-        # Set working directory for Visual Studio debugger
         set_target_properties(
-            VmaExample
-            PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
+            VmaExample PROPERTIES
+
+            CXX_EXTENSIONS OFF
+            # Use C++14
+            CXX_STANDARD 14
+            CXX_STANDARD_REQUIRED ON
         )
+
+        target_link_libraries(
+            VmaExample
+
+            PRIVATE
+            VmaLibrary
+        )
+    else()
+        message(STATUS "VmaExample application is not supported to Linux")
     endif()
-
-    set_target_properties(
-        VmaExample PROPERTIES
-
-        CXX_EXTENSIONS OFF
-        # Use C++14
-        CXX_STANDARD 14
-        CXX_STANDARD_REQUIRED ON
-    )
-
-    target_link_libraries(
-        VmaExample
-
-        PRIVATE
-        VmaLibrary
-    )
-
-ELSE()
-    message(STATUS "VmaExample application is not supported to Linux")
-ENDIF()
+endif()
diff --git a/src/Shaders/CMakeLists.txt b/src/Shaders/CMakeLists.txt
index dfc2483..15bb0be 100644
--- a/src/Shaders/CMakeLists.txt
+++ b/src/Shaders/CMakeLists.txt
@@ -1,3 +1,5 @@
+# This file will only be executed if VMA_BUILD_EXAMPLE_APP_SHADERS is set to ON
+
 find_program(GLSL_VALIDATOR glslangValidator REQUIRED)
 
 if(NOT GLSL_VALIDATOR)
diff --git a/src/VmaReplay/CMakeLists.txt b/src/VmaReplay/CMakeLists.txt
index a4d41d5..b848002 100644
--- a/src/VmaReplay/CMakeLists.txt
+++ b/src/VmaReplay/CMakeLists.txt
@@ -1,4 +1,6 @@
-IF (WIN32)
+# This file will only be executed if VMA_BUILD_REPLAY_APP is set to ON
+
+if (WIN32)
     set(VMA_REPLAY_SOURCE_FILES
         Common.cpp
         Constants.cpp
@@ -14,6 +16,6 @@
         PRIVATE
         Vulkan::Vulkan
     )
-ELSE()
+else()
     message(STATUS "VmaReplay is not supported on Linux")
-ENDIF()
+endif()