build: Enable install target on Windows
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 178debd..aa2e87e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,3 @@
-# The name of our project is "VULKAN". CMakeLists files in this project can
-# refer to the root source directory of the project as ${VULKAN_SOURCE_DIR} and
-# to the root binary directory of the project as ${VULKAN_BINARY_DIR}.
 cmake_minimum_required(VERSION 2.8.11)
 
 # This must come before the project command.
@@ -37,6 +34,12 @@
     endif(CCACHE_FOUND)
 endif()
 
+include(GNUInstallDirs)
+# Set a better default install location for Windows only if the user did not provide one.
+if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
+    set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "default install path" FORCE )
+endif()
+
 if(APPLE)
     # CMake versions 3 or later need CMAKE_MACOSX_RPATH defined.
     # This avoids the CMP0042 policy message.
@@ -323,8 +326,6 @@
 set (PYTHON_CMD ${PYTHON_EXECUTABLE})
 
 if(NOT WIN32)
-    include(GNUInstallDirs)
-
     add_definitions(-DFALLBACK_CONFIG_DIRS="${FALLBACK_CONFIG_DIRS}")
     add_definitions(-DFALLBACK_DATA_DIRS="${FALLBACK_DATA_DIRS}")
     add_definitions(-DSYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}")
@@ -335,16 +336,14 @@
     endif()
 endif()
 
-if(UNIX)
-    # uninstall target
-    configure_file(
-        "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
-        "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
-        IMMEDIATE @ONLY)
+# uninstall target
+configure_file(
+    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+    IMMEDIATE @ONLY)
 
-    add_custom_target(uninstall
-        COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
-endif()
+add_custom_target(uninstall
+    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
 
 add_definitions(-DAPI_NAME="${API_NAME}")
 
diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt
index 962c4be..d67e8d7 100644
--- a/layers/CMakeLists.txt
+++ b/layers/CMakeLists.txt
@@ -95,8 +95,8 @@
     target_compile_definitions(VkLayer_utils PUBLIC _CRT_SECURE_NO_WARNINGS)
 else()
     add_library(VkLayer_utils SHARED ${VKLAYER_UTILS_VLF_SOURCES})
-    install(TARGETS VkLayer_utils DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
+install(TARGETS VkLayer_utils DESTINATION ${CMAKE_INSTALL_LIBDIR})
 add_dependencies(VkLayer_utils generate_helper_files)
 target_include_directories(
     VkLayer_utils PUBLIC
@@ -122,27 +122,29 @@
 set(LAYER_JSON_FILES ${LAYER_JSON_FILES_WITH_DEPENDENCIES} ${LAYER_JSON_FILES_NO_DEPENDENCIES})
 
 if (WIN32)
-        if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
-            foreach (config_file ${LAYER_JSON_FILES})
-                FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
-                FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${config_file}.json dst_json)
-                add_custom_target(${config_file}-json ALL
-                    DEPENDS mk_layer_config_dir
-                    COMMAND copy ${src_json} ${dst_json}
-                    VERBATIM
-                    )
-                set_target_properties(${config_file}-json PROPERTIES FOLDER ${VVL_TARGET_FOLDER})
-            endforeach(config_file)
-        else()
-            foreach (config_file ${LAYER_JSON_FILES})
-                FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
-                FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json)
-                add_custom_target(${config_file}-json ALL
-                    COMMAND copy ${src_json} ${dst_json}
-                    VERBATIM
-                    )
-            endforeach(config_file)
-        endif()
+    if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
+        foreach (config_file ${LAYER_JSON_FILES})
+            FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
+            FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${config_file}.json dst_json)
+            add_custom_target(${config_file}-json ALL
+                DEPENDS mk_layer_config_dir
+                COMMAND copy ${src_json} ${dst_json}
+                VERBATIM
+                )
+            set_target_properties(${config_file}-json PROPERTIES FOLDER ${VVL_TARGET_FOLDER})
+            install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${config_file}.json DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        endforeach(config_file)
+    else()
+        foreach (config_file ${LAYER_JSON_FILES})
+            FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
+            FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json)
+            add_custom_target(${config_file}-json ALL
+                COMMAND copy ${src_json} ${dst_json}
+                VERBATIM
+                )
+            install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        endforeach(config_file)
+    endif()
     if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
         # Copy vk_validation_error_messages.h from source to build dir for scripts to pick up
         FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vk_validation_error_messages.h src_val_msgs)
@@ -233,6 +235,7 @@
     add_dependencies(VkLayer_${target} generate_helper_files)
     target_link_Libraries(VkLayer_${target} VkLayer_utils)
     add_dependencies(VkLayer_${target} generate_helper_files VkLayer_utils)
+    install(TARGETS VkLayer_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endmacro()
 elseif(APPLE)
     macro(add_vk_layer target)