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