c – CMake – 自动解析预编译头的依赖关系?

至少据我所知,至少CMake没有一个标准的方法来指定以跨平台方式向项目添加预编译头(PCH),因为PC编译器的处理方式与供应商.对于G,这通常是通过简单地添加一个自定义命令来处理,该命令负责使用适当的输入调用编译器,并生成PCH.

我当前的问题是,CMake不会解析您为自定义命令指定的依赖关系的依赖关系.例如,假设以下结构:

pch.h
 |- dependA.h
 |- dependB.h
 ...

只提供pch.h作为依赖关系将导致在相应的makefile中生成适当的目标,跟踪对pch.h的更改.但是,CMake不解析pch.h中的include,因此不会识别dependA.h和dependB.h的更改.如果依赖关系依赖于依赖性等等,这将会延续下去.

注意:我知道,PCH依赖关系可以和经常改变的事实使整个过程成为问题.然而,这只是它的方式,我不能真正做任何事情.

由于任务不是太难,有几个明显的想法可以想到:

解决方案A:

手动输入所有依赖项.显然这是有效的,但是如果没有任何规模,那么它就是无聊的.

解决方案B:

如果可能,请编写一个自动化进程并解析包含“手动”的CMake功能.

解决方案C:

使用不同的语言(例如Python)执行类似的操作,并且只需要为CMake提供添加自定义命令的依赖关系列表.

解决方案D:

使用gcc / g的功能来解析和打印PCH的依赖关系树,并解析输出提取依赖关系列表.

我的问题是:有没有人知道一个更方便快捷的方式来完成这个工作?

解决方法

add_custom_command的IMPLICIT_DEPENDS选项可能会诀窍:
add_custom_command(
    OUTPUT outFile
    COMMAND ...
    IMPLICIT_DEPENDS CXX "pch.h")

IMPLICIT_DEPENDS选项使生成的构建系统在构建时扫描给定输入文件的隐式依赖关系.但是,它只支持Makefile生成器.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...