使用 CMake 和 Make 构建项目时,您可以make
从构建树的子目录(即从包含您的顶级目录的任何目录下方的目录Makefile
)执行,并且make
将(据我所知)构建位于或以下的所有目标那个目录。这是因为 CMake 会Makefile
为每个包含目标的目录生成一个,因此当您在具有目标的目录中时,会make
找到Makefile
用于构建这些目标的目录。
然而,当 CMake 生成 Ninja 文件时,它只生成一个 build.ninja
文件,该文件位于构建树的顶层。ninja
因此从顶级目录以外的目录调用失败(即使该-f
选项也不起作用,因为ninja
找不到rules.ninja
文件)。
有没有办法模拟在目录及其下方构建目标的“make-like”行为?据我所知,没有对应于“特定目录下的所有目标”的 Ninja 目标。(这可以使用以每个目录命名的虚假目标来模拟,这些目标依赖于该目录及其下方的所有目标,但默认情况下 CMake 不会生成此类目标。)