Я использую glslc
для компиляции шейдеров GLSL с #include
s (не является частью основной спецификации IIRC, но поддерживается в shaderc, который является движком glslc
, распространяется с LunarG Vulkan SDK) в SPIR-V для Vulkan и GL 4.5. glslc
генерирует файлы depsfiles ([my_shader].[ext].d
) в стиле gcc, содержащие информацию о зависимостях.
Мой проект построен с помощью cmake / ninja / MSVC 2017.
Сегодня я использую cmake custom_command
для вызова glslc
при изменении шейдера на диске в качестве шага после сборки для моей основной цели. Однако это не улавливает изменения во включенных файлах (вообще не знает о файлах .d или их содержимом), поэтому перестройка шейдеров при изменении включенного файла glsl может сбить меня с толку и других людей в моей команде.
Похоже, что ниндзя может вызывать произвольные компиляторы, и, поскольку ниндзя знает, как обрабатывать файлы deps, я смогу заставить ниндзя запустить glslc - не уверен насчет других систем сборки, поскольку сейчас мы стандартизированы для ниндзя.
Итак, как я могу сказать cmake, чтобы настроить Ninja на использование glslc для определенной цели? Или есть парадигматический способ сделать это? Похоже, что запрос на извлечение cmake для добавления поддержки glslc в качестве компилятора не был не доживу до cmake примерно в 2016 году, так что все, что я сделаю, будет обходным решением.