# 第11章 打包项目

本章的主要内容有：

* 生成源代码和二进制包
* 使用CMake/pybind11构建的C++/Python项目，通过PyPI发布
* 使用CMake/CFFI构建C/Fortran/Python项目，通过PyPI发布
* 以Conda包的形式发布一个简单的项目
* 将Conda包作为依赖项发布给项目

目前为止，已经从源代码编译并安装了软件包——这意味着可以通过Git获取项目，并手动执行配置、构建、测试和安装。然而，在实际中，软件包通常是使用管理器来安装的，比如Apt、DNF、Pacman、pip和Conda。我们需要以各种格式发布我们的代码项目——作为源文件或二进制安装程序。

下图显示了使用CMake的项目的各个阶段，我们现在方案就是其中的打包时(PI)：

![](https://3513714349-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LmKrb21cWXviLivD2c0%2F-LmKrxejmBl_MvD1t461%2F-LmKs9Mq3NYlLAVC0eH6%2F2.png?generation=1565882628499602\&alt=media)

本章中，我们将探讨不同的打包策略。首先，讨论使用CMake中的工具CPack进行打包，还提供打包和上传CMake项目到Python包索引(PyPI, [https://pypi.org)和Anaconda云(https://anaconda.org](https://pypi.xn--org\)anaconda\(https-m832av88f/anaconda.org) )的方法，这些都是通过包管理器pip和Conda ([https://conda.io/docs/](https://conda.io/docs/) )分发包的平台。对于PyPI，我们将演示如何打包和分发混合C++/Python或C/Fortran/Python的项目。对于Conda，我们将展示如何对依赖于其他库的C++项目进行打包。
