【发布时间】:2014-11-29 08:17:35
【问题描述】:
我正在开发一个源代码存储库,该存储库通过运行 python 脚本输出标头和实现来生成一些 C++ 代码。此代码随后被编译并链接到我的库和可执行文件。我知道只有当两个条件之一为真时,生成的代码才会改变:
- 生成器代码本身发生变化
- 生成器的输入(XML 文件)发生变化
我想使用 cmake 来管理构建过程。目前,我正在使用execute_process 来关闭发电机。但是,每次我运行 cmake 时都会运行它并且它会触及文件,导致我生成的代码被重新编译并增加了我的总编译时间。
我还想确保生成的代码始终在我的库之前运行。换句话说,我希望库依赖于生成器来运行。
在 cmake 中处理这种情况的正确方法是什么?我已经看到了这个先前的答案:“Get CMake to execute a target in project before building a library”。但这依赖于预先知道的代码生成器的输出。我的代码生成器将生成可变数量的文件。
【问题讨论】:
-
causing my generated code to be recompiled那么您可能需要改进您的生成器吗?The generator code itself changesconfigure_file 可以解决问题:stackoverflow.com/a/26076132/2288008 -
@ruslo:只是为了检查我是否理解你的意思......我会让代码生成器以 CMAKE 可以读取的格式吐出它生成的文件列表? (一个 SET (foo1 foo2) 列表)...
-
@ruslo:另一件事。我知道生成的文件最终在哪里,并且将它们包含在最终的可执行文件中目前是使用文件(GLOB)完成的。我可以继续这样做吗?