我在 C++ 项目中使用 cmake。我想在 GCC 中使用预编译的头文件。
我想运行cmake
一次,然后在运行时make
,我希望执行以下操作:
- 在整个源代码树上运行我的自定义工具(python 脚本)。它在一些子目录中生成 precompiled.h 头文件。其目的是扫描 *.h 和 *.cpp 以查找#include,并将它们移动到常见的 precompiled.h 文件中。
g++ -c precompiled.h -o precompiled.h.gch
仅当 precompiled.h 文件在步骤 1 之后发生更改时,才生成 GCC 的预编译头文件 ( )。- 构建过时的目标(在第 2 步之后。因为我想使用 .gch 文件)
我设法添加了依赖项,所以每当我构建任何目标时,都会执行我的 python 脚本的目标(这很丑,因为现在每个目标都必须依赖于单个 global_init 目标)。我也可以修改我的 python 脚本,所以它不会在不需要时修改 precompiled.h。
但我不知道下一步该做什么。有没有办法告诉 cmake 它应该运行我的自定义脚本并在确定是否必须创建 precompiled.h.gch 之后?现在它总是被构建(这个文件包含许多#include,所以它需要一些时间)。基本上:
- 执行 python 脚本 -> precompiled.h 可能会更新
- 检查 precompiled.h 时间戳以及它是否较新 -> 构建 precompiled.h.gch
- 标准编译步骤
我看过很多地方,但是 cmake(和 make)计算依赖项的方式似乎太弱了,无法完成这项任务。
在这个问题中: lazy c++ 编译总是在lazycpp 执行之后发生。在我的情况下,这不是最佳选择。