【问题标题】:How to automate building of third party library using cmake如何使用 cmake 自动构建第三方库
【发布时间】:2012-07-30 19:25:32
【问题描述】:

我在寻找什么: 下载库 提取它 应用自定义补丁 运行配置 运行构建命令 我正在尝试构建的库是:

  • Openssl
  • 提升
  • 节俭
  • 战神
  • 卷曲
  • Pcre
  • Nginx
  • 重症监护室
  • JsonCPP

我想我可以使用外部模块来做这些事情:http://cmake.org/cmake/help/v2.8.8/cmake.html#module:ExternalProject

但我有以下问题?

  1. 我有不同类型的构建和不同的目录。是吗 将为每个不同的目标构建所有这些库?如是 这将是痛苦的,因为所有这些库都需要一个小时来构建。是 有一种方法可以控制它,它只构建一次。作为图书馆 所有这些目标都保持不变。

  2. 关于将目录切换到不同的名称。 Cmake强制一切 被重建。外部库是否相同。如是?如何 解决这个问题。如果我不是,我不想重建图书馆 更改它们并希望在切换到不同的时使用它们 分支而不构建它们。

【问题讨论】:

  • 你对这些需要你用 Cmake 构建而不是手动构建的库做了什么?
  • @Lap 自动化构建过程。
  • 我的问题是为什么要麻烦?除非你真的对这些库做了什么,否则你只需要在每个平台上手动构建一次。这比让 Cmake 构建它们要简单得多。
  • FreeBSD 端口系统正是这样做的。您可以添加 patch 目标以在构建之前自动修补内容等等。
  • @Lap 为什么要打扰。如果有新开发者加入,他需要遵循两个步骤,首先编译库,然后运行 ​​cmake,我们要合并到一个项目中。

标签: cmake


【解决方案1】:

是的,您可以使用 CMake 的 ExternalProject 功能来完成您想做的事情。

当与外部项目结合使用交叉编译时,每个工具链都会编译一次源代码。如果您将构建结果签入源代码控制系统,并在每个新人的机器上重新签出,您可以避免重新构建,但我不建议这样做。相反,让您的“设置新计算机”任务之一实际上允许编译在一夜之间运行,这也将作为机器实际可用的测试。该设置任务可以由系统管理员在新员工到来之前启动,或者您可以根据情况将其留给新员工。

我不完全确定您在第二个问题中要问什么,但是如果库未更改,CMake 将检测到它未更改并且不会重新编译它。通常,源代码将位于单个目录树中:每个编译版本都将构建在不同的位置。因此,开发人员只需切换目录即可随时访问任何编译版本。这特别有用,因为它允许您通过 NFS 将这些目录挂载到嵌入式硬件等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 2014-07-25
    • 1970-01-01
    • 2013-04-28
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多