返回介绍

11.4 以 Conda 包的形式发布一个简单的项目

发布于 2025-05-06 21:46:00 字数 3979 浏览 0 评论 0 收藏

NOTE : 此示例代码可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-11/recipe-04 中找到。该示例在 CMake 3.5 版(或更高版本) 中是有效的,并且已经在 GNU/Linux、macOS 和 Windows 上进行过测试。

虽然 PyPI 是发布 Python 包的标准平台,但 Anaconda ( https://anaconda.org ) 更为可能更为流行,因为它不仅允许使用 Python 接口发布 Python 或混合项目,还允许对非 Python 项目进行打包和依赖关系管理。这个示例中,我们将为一个非常简单的 C++示例项目准备一个 Conda 包,该项目使用 CMake 配置和构建,除了 C++之外没有依赖关系。下一个示例中,我们将会来看看一个更复杂的 Conda 包。

准备工作

我们的目标是打包以下示例代码( example.cpp ):

#include <iostream>
int main() {
    std::cout << "hello from your conda package!" << std::endl;
    return 0;
}

具体实施

  1. CMakeLists.txt 文件给出了最低版本要求、项目名称和支持的语言:
    cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
    project(recipe-04 LANGUAGES CXX)
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_EXTENSIONS OFF)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
  2. 使用 example.cpp 构建 hello-conda 可执行目标:
    add_executable(hello-conda "")
    target_sources(hello-conda
      PRIVATE
          example.cpp
      )
  3. 使用 CMakeLists.txt 定义安装目标:
    nstall(
      TARGETS
          hello-conda
      DESTINATION
          bin
      )
  4. 将在一个名为 meta.yaml 的文件中,对 Conda 包进行描述。我们将把它放在 conda-recipe 目录下,文件结构如下:
    .
    ├── CMakeLists.txt
    ├── conda-recipe
    │    └── meta.yaml
    └── example.cpp
  5. meta.yaml 包含如下内容:
    package:
      name: conda-example-simple
      version: "0.0.0"
    ​
    source:
      path: .. /  # this can be changed to git-url
    ​
    build:
      number: 0
      binary_relocation: true
      script:
        - cmake -H. -Bbuild_conda -G "${CMAKE_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${PREFIX} # [not win]
        - cmake -H. -Bbuild_conda -G "%CMAKE_GENERATOR%" -DCMAKE_INSTALL_PREFIX="%LIBRARY_PREFIX%" # [win]
        - cmake - -build build_conda - -target install
    ​
    requirements:
      build:
        - cmake >=3.5
        - { { compiler('cxx') } }
    ​
    about:
      home: http://www.example.com
      license: MIT
      summary: "Summary in here ..."
  6. 现在来构建包:
    $ conda build conda-recipe
  7. 过程中屏幕上看到大量输出,但是一旦构建完成,就可以对包进行安装。首先,在本地进行测试:
    $ conda install --use-local conda-example-simple
  8. 现在准备测试安装包,打开一个新的终端(假设 Anaconda 处于激活状态),并输入以下内容:
    $ hello-conda
    ​
    hello from your conda package!
  9. 测试成功后,再移除包装:
    $ conda remove conda-example-simple

工作原理

CMakeLists.txt 中,安装目标是这个示例的一个基本组件:

install(
  TARGETS
      hello-conda
  DESTINATION
      bin
  )

目标的二进制文件会安装到 ${CMAKE_INSTALL_PREFIX}/bin 中。变量由 Conda 定义,并且构建步骤中定义在 meta.yaml

build:
  number: 0
  binary_relocation: true
  script:
    - cmake -H. -Bbuild_conda -G "${CMAKE_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${PREFIX} # [not win]
    - cmake -H. -Bbuild_conda -G "%CMAKE_GENERATOR%" -DCMAKE_INSTALL_PREFIX="%LIBRARY_PREFIX%" # [win]
    - cmake - -build build_conda - -target install

将安装目录设置为 ${prefix} (Conda 的内部变量),然后构建并安装项目。调用构建目录命名为 build_conda 的动机与前面的示例类似:特定的构建目录名可能已经命名为 build

更多信息

配置文件 meta.yaml 可为任何项目指定构建、测试和安装步骤。详情请参考官方文档: https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html

要将 Conda 包上传到 Anaconda 云,请遵循官方的 Anaconda 文档: https://docs.anaconda.com/anaconda-cloud/user-guide/

此外,也可以考虑将 Miniconda,作为 Anaconda 的轻量级替代品: https://conda.io/miniconda.html

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。