我目前的问题是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的依赖关系树,并解析输出以提取依赖关系列表。
我的问题是:有没有人知道更方便,更快捷的方法来完成这项工作?
答案 0 :(得分:4)
add_custom_command的IMPLICIT_DEPENDS
选项可能会解决问题:
add_custom_command(
OUTPUT outFile
COMMAND ...
IMPLICIT_DEPENDS CXX "pch.h")
IMPLICIT_DEPENDS
选项使生成的构建系统在构建时扫描给定输入文件的隐式依赖项。但是,它仅支持Makefile生成器。