ich brauche mal wieder etwas experten wissen im Bereich CMAKE
Aktuell mache ich folgendes:
Ich sammle alle shader files in meinem Projekt (liegen per Konvention alle im gleiche Folder)
Code: Alles auswählen
# find all the shader files under the shaders folder
file(GLOB_RECURSE GLSL_SOURCE_FILES
"${PROJECT_SOURCE_DIR}/shaders/*.frag"
"${PROJECT_SOURCE_DIR}/shaders/*.vert"
"${PROJECT_SOURCE_DIR}/shaders/*.comp"
"${PROJECT_SOURCE_DIR}/shaders/*.mesh"
"${PROJECT_SOURCE_DIR}/shaders/*.task"
)
Code: Alles auswählen
## iterate each shader
foreach(GLSL ${GLSL_SOURCE_FILES})
message(STATUS "BUILDING SHADER")
get_filename_component(FILE_NAME ${GLSL} NAME)
set(SPIRV "${PROJECT_SOURCE_DIR}/shaders/${FILE_NAME}.spv")
message(STATUS ${GLSL})
##execute glslang command to compile that specific shader
add_custom_command(
OUTPUT ${SPIRV}
COMMAND ${GLSL_VALIDATOR} --target-env vulkan1.3 -V ${GLSL} -o ${SPIRV} #--target-env vulkan1.3 sets spir-v version to 1.6
DEPENDS ${GLSL})
list(APPEND SPIRV_BINARY_FILES ${SPIRV})
endforeach(GLSL)
add_custom_target(
Shaders
DEPENDS ${SPIRV_BINARY_FILES}
SOURCES ${GLSL_SOURCE_FILES}
)
Nur habe ich auch diverse include Files fuer meine Shader.
Wie bekomme ich jetzt cmake dazu bei aenderungen in den header files die entsprechendend shader neu zu kompilieren?
Jedesmal von hand einen Rebuild des shader Targets aufzurufen funktioniert zwar, wird aber leicht vergessen....