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”构建和回归系统。一些用户使用“忍者”和其他“制造”作为cmake的底层生成器 我们有一些自定义目标,它们调用外部工具,生成包含各种子目录和文件的目录 当试图“清理”时,忍者用户会收到如下错误: ninja: error: remove(<dirABC>/<subdirXYZ>): Directory not empty ninja: error: remove(<dirABC>): Directory not empty ...

同事们

我们使用“cmake”构建和回归系统。一些用户使用“忍者”和其他“制造”作为cmake的底层生成器

我们有一些自定义目标,它们调用外部工具,生成包含各种子目录和文件的目录

当试图“清理”时,忍者用户会收到如下错误:

ninja: error: remove(<dirABC>/<subdirXYZ>): Directory not empty
ninja: error: remove(<dirABC>): Directory not empty
...
忍者:错误:删除(/):目录不为空 忍者:错误:删除():目录不为空 ... 我将输出目录列为自定义构建目标的输出(上面的“dirABC”)。但这并不支持递归删除

在配置或生成时无法知道文件和子目录名列表(在“dirABC”下面)。只有在运行之后才知道名称

我的问题是:

当ninja用户运行“ninja clean”时,如何删除这些输出目录及其内容?

请注意,“make”用户没有这个问题。我用“附加的文件”属性标记目录。Make在顶级输出目录上做了一个“rm-rf”,我们就干净了。关键是“-r”


在cmake中,我想在顶级“clean”目标中添加一个依赖项,以告知如何实际清理,但cmake不允许…

我解决这个问题的方法是定义一个新的目标“clean”:

现在,我有了一个一流的顶级目标,我可以将其附加到:

…
  add_dependencies(Clean whatever-clean)
…
当用户键入“ninja Clean”或“gmake Clean”时,将首先运行“which Clean”目标,然后运行默认的“Clean”

…
  add_dependencies(Clean whatever-clean)
…