Python C++扩展:仅编译修改后的源文件

Python C++ extension: compile only modified source files

本文关键字:修改 源文件 编译 C++ 扩展 Python      更新时间:2023-10-16

我正在开发一个包含C++扩展的python包。当我使用 setup.py 脚本或使用 pip 安装包时,C++源文件都被编译并链接以获得单个 .so 库,然后可以将其导入到 Python 源代码中。在开发过程中,我需要对源代码进行多次更改(测试、调试等)。我发现重新安装软件包涉及重建所有C++源文件,即使只更改了一个文件的一小部分。显然,这占用了相当多的时间。

我知道开发模式(python setup.py develop或pip install -e)放置指向源文件的链接,以便在重新导入模块时立即看到所做的更改。但是,这仅适用于.py源文件,而不适用于C++扩展名,每次更改后都必须重新编译该扩展名。

有没有办法让 setup.py 查看构建目录中的 .o 文件(在开发模式下)并使用它们的时间戳来确定哪些文件需要重新编译?我正在考虑GNU Make基于时间戳执行选择性编译的方式。谢谢

我建议使用Make(其他其他构建系统,如CMake)进行开发,setup.py 仅用于最终安装/部署。我做过类似的Python + C++项目,它以这种方式工作得很好。