到目前为止,至少据我所知,CMake 中还没有标准的方法来指定以跨平台方式将预编译头 (PCH) 添加到项目中,因为 C++ 编译器处理 PCH 的方式非常不同供应商。对于 G++,这通常可以通过简单地添加一个自定义命令来解决,该命令负责使用适当的输入调用编译器并让它生成 PCH。
我当前的问题是 CMake 不会解析您为自定义命令指定的依赖项的依赖项。例如,假设以下结构:
pch.h
|- dependA.h
|- dependB.h
...
仅提供pch.h
作为依赖项将导致在相应的目标中生成适当的目标,该目标makefile
跟踪对 的更改pch.h
。但是,CMake 不会解析内部 pch.h
包含的内容,因此无法识别对dependA.h
和的更改dependB.h
。如果存在依赖等,这将进一步扩展dependsA.h
。
注意:我知道 PCH 依赖项可以并且确实会定期更改这一事实使整个过程受到质疑。然而,这就是它的方式,我真的无能为力。
由于任务不是太难,所以有几个明显的想法浮现在脑海:
解决方案 A:
手动输入所有依赖项。显然这是可行的,但是非常乏味并且根本无法扩展。
解决方案 B:
如果可能,编写一个 CMake 函数来自动化该过程并“手动”解析包含。
解决方案 C:
使用不同的语言(例如 Python)执行类似的操作,只需向 CMake 提供要添加到自定义命令的依赖项列表。
解决方案 D:
使用gcc
/g++
的特征解析并打印出 PCH 的依赖树,解析输出提取依赖列表。
我的问题是:有谁知道更方便快捷的方法来完成这项工作?