【发布时间】:2020-02-26 18:56:30
【问题描述】:
我正在使用glslc 将带有#includes 的GLSL 着色器(不是核心规范IIRC 的一部分,但在shaderc 中支持,这是glslc 背后的引擎,与LunarG Vulkan SDK 一起分发)到SPIR -V 用于 Vulkan 和 GL 4.5。 glslc 发出 gcc 样式的 depsfiles ([my_shader].[ext].d) 包含依赖信息的文件。
我的项目是使用 cmake/ninja/MSVC 2017 构建的。
今天,当着色器在磁盘上发生更改时,我使用 cmake custom_command 调用 glslc,作为我主要目标的构建后步骤。但是,这不会捕获包含文件中的更改(根本不知道 .d 文件或其内容),因此当包含的 glsl 文件发生更改时重建着色器可能会使我自己和我团队中的其他人绊倒。
看起来 ninja 可以调用任意编译器,并且由于 ninja 知道如何处理 depsfiles,我应该能够强制 ninja 运行 glslc —— 不确定其他构建系统,因为现在我们对 ninja 进行了标准化。
那么我怎样才能告诉 cmake 配置 ninja 以将 glslc 用于特定目标?还是有一种典型的方式来完成这项工作?看起来 cmake pull request to add support for glslc as a compiler 大约在 2016 年没有进入 cmake,所以无论我做什么都是一种解决方法。
【问题讨论】: