Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找因cmake项目中的源更改而受影响的所有目标_Cmake_Ninja - Fatal编程技术网

查找因cmake项目中的源更改而受影响的所有目标

查找因cmake项目中的源更改而受影响的所有目标,cmake,ninja,Cmake,Ninja,在基于cmake的项目(C/C++)中,如果源文件中发生了更改,我需要一种方法来转储受影响目标的列表(包括可传递的依赖项) 我正在考虑: Generate source to.o mapping=>使用-GNinja生成生成文件并解析CMakeFiles/.dir/.o.d文件 生成一个可解析的输出--graphviz option=>还没有解决方案 找到一种使用add_dependencies()处理添加到自定义目标的依赖项的方法=>还没有解决方案 实现这一点的最佳方法是什么?支持@usr12

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

我正在考虑:

  • Generate source to.o mapping=>使用-GNinja生成生成文件并解析CMakeFiles/.dir/.o.d文件
  • 生成一个可解析的输出--graphviz option=>还没有解决方案
  • 找到一种使用add_dependencies()处理添加到自定义目标的依赖项的方法=>还没有解决方案

  • 实现这一点的最佳方法是什么?

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

    有很多东西可以支持你:

    > ninja -t query CMakeFiles\HelloWorld.dir\main.obj
    
    CMakeFiles/HelloWorld.dir/main.obj:
      input: CXX_COMPILER__HelloWorld
        ../main.cpp
      outputs:
        HelloWorld.exe
    
    或提及的“干运行”,包括:


    具体办法将更加复杂。有关起点,请参阅。

    也许您可以使用试运行并从中提取信息-n是Ninja和Make的标志。解析Make输出会有点笨拙。其输出取决于make是否已运行。由于cmake有目标和依赖性信息,我希望有一个更干净的cmake特定解决方案。忍者的查询选项对我来说效果很好,谢谢。忍者的查询选项对我来说效果很好。
    > ninja -d explain -n