使用 CMake + Ninja 使用 GIT 下载依赖项

Posted

技术标签:

【中文标题】使用 CMake + Ninja 使用 GIT 下载依赖项【英文标题】:Using CMake + Ninja to download dependencies using GIT 【发布时间】:2014-10-29 03:37:01 【问题描述】:

我有一个 ExternalProject 依赖项,它在构建过程中被克隆(使用 git)。这一切都适用于 CMake + Make。

mkdir build && cd build; 
cmake ..
make

当我输入 make 时,它​​会使用 git 正确克隆和构建库。

但是,当我使用 Ninja Generator 时:

mkdir build && cd build; 
cmake -GNinja ..
ninja

我收到以下错误:

$ cmake -GNinja ..                                                                                                                                                                                                                                                   -- The C compiler identification is AppleClang 6.0.0.6000054
-- The CXX compiler identification is AppleClang 6.0.0.6000054
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Ninja
-- Check for working CXX compiler using: Ninja -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Boost version: 1.56.0
-- Found the following Boost libraries:
--   unit_test_framework
-- Found Git: /usr/local/bin/git (found version "2.1.2")
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/carneiro/src/gamgee/build

$ ninja ninja: error: 'contrib/htslib-prefix/src/htslib/libhts.a', needed by 'test/gamgee_test', missing and no known rule to make it

cmake+ninja组合不支持git下载外部项目吗?

【问题讨论】:

【参考方案1】:

事实证明,如果您在构建之前进行清理,一切正常,并且 ninja 确实会正确下载我的依赖项。

所以工作流程如下所示:

mkdir build && cd build
cmake -G Ninja ..
ninja clean  # if you don't do this, it will not download Externalproject dependencies
ninja

一定是 Ninja 生成器中的某种错误,但我现在对这个工作流程很满意。

【讨论】:

由于您使用的是 Ninja,以下内容是否也适用于源代码根目录? cmake --build build --target all --clean-first

以上是关于使用 CMake + Ninja 使用 GIT 下载依赖项的主要内容,如果未能解决你的问题,请参考以下文章

使用 CMake、Clang 和 Ninja 在 Windows 上构建 c++ 项目

CMake / Ninja:当内容未知时递归“清理”输出目录......?

CMake 找不到 Ninja

获取 CMake 的 Ninja 测试命令

如何使用带有 Ninja 生成器的 CMake 将修饰符标志传递给存档文件(ar)

CMake/Ninja 试图编译已删除的“.cpp”文件