cmake_minimum_required(VERSION 3.16) project(VulkanTest) set(CMAKE_CXX_STANDARD 17) find_package(glfw3 REQUIRED) find_package(Vulkan REQUIRED) add_compile_definitions(WITH_VALIDATION_LAYERS) set(CMAKE_BUILD_TYPE Debug) FILE(GLOB_RECURSE CXX_SOURCES src/*.cpp) FILE(GLOB_RECURSE GLSL_SOURCE_FILES shaders/**.frag shaders/**.vert) foreach(GLSL ${GLSL_SOURCE_FILES}) get_filename_component(FILE_NAME "${GLSL}" NAME) set(SPV_FILE "${PROJECT_BINARY_DIR}/shaders/${FILE_NAME}.spv") add_custom_command(OUTPUT ${SPV_FILE} COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/shaders/" COMMAND glslc ${GLSL} -g -o ${SPV_FILE} DEPENDS ${GLSL} COMMENT "Rebuilding ${SPV_FILE}") list(APPEND SPIRV_BINARY_KERNELS ${SPV_FILE}) endforeach() add_custom_target(shaders DEPENDS ${SPIRV_BINARY_KERNELS}) add_executable(VulkanTest ${CXX_SOURCES}) add_dependencies(VulkanTest shaders) target_link_libraries(VulkanTest glfw vulkan)