使用CMake和Make构建项目时,可以执行make
从构建树的子目录(即从包含顶级目录的目录下面的目录)Makefile
), and make
将(据我所知)构建该目录下或该目录下的所有目标。这是因为 CMake 生成了一个Makefile
对于每个包含目标的目录,因此当您位于包含目标的目录中时,make
找到Makefile
来制定这些目标。
然而,当 CMake 生成 Ninja 文件时,它只生成one build.ninja
文件,位于构建树的顶层。所以打电话ninja
从顶级目录以外的目录失败(即使是-f
选项不起作用,因为ninja
找不到rules.ninja
file).
有没有什么方法可以模拟在目录及其下构建目标的“类make”行为?据我所知,不存在与“特定目录及其下的所有目标”相对应的 Ninja 目标。 (这可以使用以每个目录命名的虚假目标来模拟,这些目标依赖于该目录及其下的所有目标,但 CMake 默认情况下不会生成此类目标。)
ninja <DIR>/all
适用于最新版本的 Ninja (1.7.2)。 1.3.4 版本不允许这样做。
我找不到对此的引用手册 https://ninja-build.org/manual.html。然而,CMake 有这个记录here https://cmake.org/cmake/help/v3.8/generator/Ninja.html:
最新版本的 ninja 程序可以通过“all”目标构建项目。还提供了“安装”目标。
对于项目的每个子目录 sub/dir,都会生成其他目标:
- 子/目录/全部
取决于子目录所需的所有目标。
- 子/目录/安装
运行子目录中的安装步骤(如果有)。
- 子/目录/测试
运行子目录中的测试步骤(如果有)。
- 子/目录/包
运行子目录中的包步骤(如果有)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)