1

我正在使用 OpenGL Loader Generator 为我的项目生成 GL 函数加载代码。它生成 gl_loader.h 和 gl_loader.c。我的其他一些源文件依赖于 gl_loader.h,但不是全部,所以我需要 cmake 在编译其余代码之前(重新)运行 glLoadGen,否则编译会因为尝试编译而停止在 gl_loader.h 构建之前依赖于 gl_loader.h 的文件。我已将 GENERATED 属性添加到 gl_loader.h/.c 但这并不是该属性旨在解决的问题,并且它不起作用。

在这种情况下,我可以简单地将 OBJECT_DEPENDS 属性添加到我的所有源文件中,因为我几乎不需要重新运行 glLoadGen。但在其他情况下,这会导致过多不必要的重新编译,例如当 GObjectBuilder (gob2) 生成多个 C 源文件和头文件时。手动计算出哪些 C 文件取决于哪个生成的头文件是不切实际的。

在这种情况下,另一种可能性是在配置时而不是构建时运行 glLoadGen,但这不适用于 gob2 的其他场景。

有没有其他方法可以告诉 cmake 在编译其他代码之前它必须运行 glLoadGen ?

4

1 回答 1

1

这似乎是GENERATED源文件属性的理想方案。它基本上告诉 CMake 不要担心在配置时(当 CMake 运行时)源文件不存在;它会在构建时需要时可用(make/vc/etc. 运行时)。

我不熟悉 OpenGL 或它的 Loader Generator,但如果您使用 的OUTPUT形式add_custom_command调用 glLoadGen,该GENERATED属性会自动应用于输出文件:

add_custom_command(OUTPUT gl_loader.h gl_loader.c
                   COMMAND glLoadGen [whatever args are needed]
                   COMMENT "Generating gl_loader.h and gl_loader.c")
...
add_executable(MyExe ${OtherSources} gl_loader.h gl_loader.c)

使用此设置,当您构建 MyExe 时,应首先执行自定义命令(如果需要)生成适当的源 (gl_loader.h/.c)

于 2013-12-27T15:46:00.603 回答