cmake_minimum_required(VERSION 3.30) project(vulkan_test) set(CMAKE_CXX_STANDARD 26) set(GLFW_USE_WAYLAND ON) find_package(Vulkan REQUIRED) find_package(glfw3 3.3 REQUIRED) # Suche nach dem glslc Compiler find_program(GLSLC glslc) if(NOT GLSLC) message(FATAL_ERROR "glslc compiler not found. Please install the Vulkan SDK.") endif() # Alle Shader-Dateien im Verzeichnis ./shaders sammeln file(GLOB SHADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.vert" "${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.frag" ) set(SPIRV_SHADERS "") foreach(SHADER ${SHADER_FILES}) # Dateiname extrahieren get_filename_component(SHADER_NAME ${SHADER} NAME) # Zielpfad für die kompilierten Shader im Build-Verzeichnis set(SPIRV "${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.spv") # Custom Command zum Kompilieren des Shaders add_custom_command( OUTPUT ${SPIRV} COMMAND ${GLSLC} ${SHADER} -o ${SPIRV} DEPENDS ${SHADER} COMMENT "Compiling ${SHADER_NAME}" ) list(APPEND SPIRV_SHADERS ${SPIRV}) endforeach() # Custom Target, das alle Shader kompiliert add_custom_target(compile_shaders ALL DEPENDS ${SPIRV_SHADERS}) # Das eigentliche Executable add_executable(vulkan_test main.cpp vulkan/vulkan_app.cpp vulkan/vulkan_app.hpp ) target_link_libraries(vulkan_test PRIVATE Vulkan::Vulkan glfw) # Sicherstellen, dass die Shader vor dem Bauen des Executables kompiliert werden add_dependencies(vulkan_test compile_shaders)