用于生成和打包CMake项目的Setuptools扩展

cmake-build-extension的Python项目详细描述


cmake生成扩展

VersionPython versionsStatusFormatLicensePython CI/CD

用于生成和打包CMake项目的Setuptools扩展。在

一个项目^ {CD1>},C++文件可以用CMake编译(这里^ {< CD2>}) Python包(这里是my_python_package)的结构如下:

myproject/
|-- CMakeLists.txt
|-- include
|   `-- MyClass.h
|-- python
|   `-- my_python_package
|       `-- __init__.py
|-- setup.py
`-- src
    `-- MyClass.cpp

C++和Python可以是独立的,即使这种混合设置通常是 应用于希望提供C++库的Python绑定的项目。在

此扩展启用以下功能:

  • 简化了Python打包和CMake的交互。在
  • 允许通过setuptools生成和打包通用CMake项目。在
  • 简化了C++和Python混合项目的分发和使用。在

setup.py脚本的以下行向管道添加了一个build_ext步骤,该步骤 在生成的Python包的根目录中编译并安装CMake项目:

^{pr2}$

注意:如果CMake还导出目标,下游项目可以通过 正在将已安装的Python包的目录添加到CMAKE_PREFIX_PATH。在

生成的Python安装树将类似于以下内容:

site-packages/
`-- my_python_package
    |-- __init__.py
    `-- lib
        |-- cmake
        |   |-- MyProject.cmake
        |   |-- MyProjectTargets.cmake
        |   `-- MyProjectVersion.cmake
        `-- libMyProject.so

这样,如果C++项目也包含Python绑定,它们可以由您最喜爱的工具生成。 和CMake一起处理。这通常很方便,因为CMake通常具有强大的模块 简化建筑过程,尤其是大型项目。在

查看^{}以获得一个最小的工作示例。在

用法

一旦CMake project和setup.py都正确配置,则 可以使用命令:

# Install with pip
pip install .
pip install --editable .

# Install with setup.py
python setup.py install .
python setup.py develop .

# Install with pip passing custom CMake options
pip install --global-option="build_ext" --global-option="-DBAR=Foo;VAR=TRUE" .

# Install with setup.py passing custom CMake options
python setup.py install build_ext -D"BAR=Foo;VAR=TRUE"# Create wheel with pip
pip wheel -w dist .

# Create wheel with setup.py
python setup.py bdist_wheel

# Create wheel with setup.py passing custom CMake options
python setup.py bdist_wheel build_ext -D"BAR=Foo;VAR=TRUE"

如果Python项目符合PEP517和PEP518,pip将使用一个独立的环境。 请注意,CMake的find_package仍然可以从文件系统中找到资源,而且它会找到的 不是孤立的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
构造函数的java条件调用   类Dog中的java构造函数Dog不能应用于给定类型   java jsch和运行“sudo su”   java将队列和堆栈相互复制   java如何在netbeans项目的文件夹中添加库   java While循环在我的代码中不存在   如何在XML中使用java方法的返回值   java是否可以在不写入文件的情况下将字符串/字节数组作为文件发布?   java为什么这些字符串不相等?   sockets客户机-服务器java编程,用户可选择   java如何在SpringMVC和hibernate中保存模型返回视图的列表   java如何修复组织。openqa。硒。WebDriverException:未知错误   Java,Ant错误:编码Cp1252的不可映射字符   JAVAlang.ClassCastException:[Ljava.lang.String;与java.lang.String不兼容   java如何使用JDK8(可选)为空字段创建自定义IntelliJ getter模板   java Tomcat6响应。sendRedirect()404错误