Use system GTest instead of the bundled copy and register the test with
CTest.  Build and install a shared SPIRV-Reflect library, use standard
GNU installation directories, and keep the static library optional.
--- ../CMakeLists.txt	2026-10-02 14:10:40.754366161 +0300
+++ ../CMakeLists.txt	2026-10-02 14:14:11.229760826 +0300
@@ -2,6 +2,8 @@
 
 project(spirv-reflect)
 
+include(GNUInstallDirs)
+
 OPTION(SPIRV_REFLECT_EXECUTABLE     "Build spirv-reflect executable" ON)
 
 OPTION(SPIRV_REFLECT_STATIC_LIB     "Build a SPIRV-Reflect static library" OFF)
@@ -49,7 +51,7 @@
     endif()
 
     if(SPIRV_REFLECT_INSTALL)
-        install(TARGETS spirv-reflect RUNTIME DESTINATION bin)
+        install(TARGETS spirv-reflect RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     endif()
 
     # ==========================================================================
@@ -79,7 +81,7 @@
     endif()
 
     if(SPIRV_REFLECT_INSTALL)
-        install(TARGETS spirv-reflect-pp RUNTIME DESTINATION bin)
+        install(TARGETS spirv-reflect-pp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     endif()
 endif()
 
@@ -89,12 +91,8 @@
 
 if (SPIRV_REFLECT_BUILD_TESTS)
     message("Tests are enabled!")
-    SET(BUILD_GMOCK OFF CACHE BOOL "Builds the googlemock subproject" FORCE)
-    SET(BUILD_GTEST ON CACHE BOOL "Builds the googletest subproject" FORCE)
-    SET(INSTALL_GTEST OFF CACHE BOOL "Enable installation of googletest. (Projects embedding googletest generally turn this OFF.)" FORCE)
-    SET(gtest_force_shared_crt ON CACHE BOOL "Enable DLL for C runtime libraries on Windows" FORCE)
-
-    add_subdirectory(third_party/googletest)
+    enable_testing()
+    find_package(GTest REQUIRED)
 	add_executable(test-spirv-reflect ${CMAKE_CURRENT_SOURCE_DIR}/tests/test-spirv-reflect.cpp
                                       ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
                                       ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.c
@@ -105,26 +103,52 @@
                           CXX_STANDARD 11)
     target_compile_definitions(test-spirv-reflect PRIVATE
                                $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>)
-    target_link_libraries(test-spirv-reflect gtest_main)
+    target_link_libraries(test-spirv-reflect GTest::gtest_main)
     target_include_directories(test-spirv-reflect PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+    file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
+    add_test(NAME test-spirv-reflect COMMAND test-spirv-reflect)
+    set_tests_properties(test-spirv-reflect PROPERTIES
+                         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
     add_custom_command(TARGET test-spirv-reflect POST_BUILD
                        COMMAND ${CMAKE_COMMAND} -E copy_directory
                        ${CMAKE_CURRENT_SOURCE_DIR}/tests ${CMAKE_CURRENT_BINARY_DIR}/tests)
 endif()
 
+add_library(spirv-reflect-shared SHARED
+            ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.c)
+
+target_include_directories(spirv-reflect-shared
+    PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+
+set_target_properties(spirv-reflect-shared PROPERTIES
+                      OUTPUT_NAME spirv-reflect)
+
+if(SPIRV_REFLECT_INSTALL)
+    install(TARGETS spirv-reflect-shared
+            LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif()
+
 if(SPIRV_REFLECT_STATIC_LIB)
     add_library(spirv-reflect-static STATIC ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
                                      ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.c)
 
     target_include_directories(spirv-reflect-static
-                               PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
-
-    set_target_properties(spirv-reflect-static PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h")
+        PUBLIC
+            $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+            $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+    set_target_properties(spirv-reflect-static PROPERTIES
+                          OUTPUT_NAME spirv-reflect)
 
     if(SPIRV_REFLECT_INSTALL)
         install(TARGETS spirv-reflect-static
-                LIBRARY DESTINATION lib
-                ARCHIVE DESTINATION lib
-                PUBLIC_HEADER DESTINATION include)
+                ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
 endif()
+
+if(SPIRV_REFLECT_INSTALL)
+    install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reflect.h
+            DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+endif()
