I think it’s better to be more proactive about these kinds of things. Have a variable about whether to use external copies or not and do that. These fallbacks only make weird states when things go as one isn’t expecting and it looks like it’s working when it’s really getting the wrong thing.
option(use_external_vulkan "blah" ${use_external_default})
if (use_external_vulkan)
find_package(VulkanHeaders CONFIG)
if (NOT VulkanHeaders_FOUND)
message(FATAL_ERROR
"External Vulkan requested, but not found: ${VulkanHeaders_NOT_FOUND_MESSAGE}")
endif ()
else ()
add_subdirectory(vulkan)
endif ()
# TODO: set up an INTERFACE target to patch over differences