由于 cmake 项目中的源更改,查找所有受影响的目标

Posted

技术标签:

【中文标题】由于 cmake 项目中的源更改,查找所有受影响的目标【英文标题】:Finding all affected targets due to source change in cmake project 【发布时间】:2018-04-28 05:41:11 【问题描述】:

在基于 cmake 的项目 (C/C++) 中,如果源文件发生更改,我想要一种方法来转储受影响目标的列表(包括传递依赖项)。

我正在考虑:

    生成源到 .o 映射 => 使用 -GNinja 生成构建文件并解析 CMakeFiles/.dir/.o.d 文件 生成 --graphviz 选项的可解析输出 => 尚无解决方案 找出一种方法来处理使用 add_dependencies() 添加到自定义目标的依赖项 => 尚无解决方案

实现这一目标的最佳方法是什么?

【问题讨论】:

也许您可以使用试运行并从中提取信息? -n 是 Ninja 和 Make 的标志。 解析 make 输出会有点笨拙。它的输出取决于 make 是否已经运行。由于 cmake 有目标和依赖信息,我希望有一个更干净的 cmake 特定解决方案。 Ninja 的查询选项非常适合我的目的,谢谢。 【参考方案1】:

支持@usr1234567 的评论,如果我想了解依赖关系,我将使用您的第一个-G Ninja 方法。

ninja 确实有很多tool/debug options 支持你:

> ninja -t query CMakeFiles\HelloWorld.dir\main.obj

CMakeFiles/HelloWorld.dir/main.obj:
  input: CXX_COMPILER__HelloWorld
    ../main.cpp
  outputs:
    HelloWorld.exe

或提到的“试运行”:

> ninja -d explain -n

cmake 特定的方法会更复杂。有关起点,请参阅"make dist" equivalent in CMake。

【讨论】:

Ninja 的查询选项非常适合我的目的。

以上是关于由于 cmake 项目中的源更改,查找所有受影响的目标的主要内容,如果未能解决你的问题,请参考以下文章

查找所有子目录中的所有头文件

递归查找和替换文件中的字符串,为受影响的文件创建备份

dotnet 中的污染流分析

如何在构建之前使CMake运行python脚本,以便为我的项目生成文件以在构建中使用?

限制 Redux 仅更新受更改影响的组件

如何复制不受原始 ArrayList 更改影响的 ArrayList? [复制]