python - 使用 Makefile.am 相对于 setup.py 有什么缺点吗?

标签 python c++ autotools automake distutils

我正在努力将项目从 scons 转换为 autotools,因为它似乎会自动生成许多在 SConscript 中编写的烦人的功能(例如 make uninstall)。

该项目主要基于 C++,但也包括一些用 Python 编写的模块。经过大量阅读自动工具后,我终于可以创建一个共享库,对其编译和链接可执行文件,并安装 C++ 头文件。迷人的。现在是Python部分。通过在configure.ac中包含AM_PYTHON_PATH,我还使用Makefile.am文件安装python模块,例如

autopy_PYTHON=autopy/__init__.py autopy/noindent.py autopy/auto.py submoda_PYTHON=autopy/submoda/moda.py autopy/submoda/modb.py autopy/submoda/modc.py autopy/submoda/__init__.py submodb_PYTHON=autopy/submodb/moda.py autopy/submodb/modb.py autopy/submodb/modc.py autopy/submodb/__init__.py

autopydir=$(pythondir)/autopy submodadir=$(pythondir)/submoda submodbdir=$(pythondir)/submodb

dist_bin_SCRIPTS=脚本/script1 脚本/script2 脚本/script3

这似乎将我的所有模块和脚本放置在适当的位置,但我想知道这是否“正确”,因为安装 python 模块的方法似乎是通过 distutils 通过 setup.py 脚本。我确实在 python 模块中有 setup.py 脚本,并且 scons 一直在调用它们,直到我使用 autotools 进入。一种方法优于另一种方法吗?当我使用 autotools 构建时,我还应该使用 setup.py 吗?我想了解人们通常如何使用自动工具解决 c++ 和 python 模块的构建问题。我还有很多其他自动工具问题,但我会将这些问题留到以后再说。

最佳答案

根据您的描述,我建议您使用库存自动工具生成的 configureMakefile 构建项目,即 autoconfautomake,并让您的configureMakefile负责执行您的setup.py,以便设置您的 Python 位。

我有一个项目,主要是 C/C++ 代码,以及 Perl 模块。这与您尝试执行的操作非常相似,只不过它是 Perl 而不是 Python。

在我的 Makefile (从 Makefile.am 生成)中,我有一个执行 Perl 模块的 Makefile.PL 的目标,这是类似的到 Python 的 setup.py,以这种方式,我将 Perl 模块与其余 C++ 代码无缝地一起构建为单个构建。效果相当好。

automake 的 Makefile.am 非常开放且灵活,可以轻松地进行调整和扩展以合并外来位,例如这些。

关于python - 使用 Makefile.am 相对于 setup.py 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368441/

相关文章:

python - autotools:将常量从configure.ac传递到python脚本

Autotools:应该将 config.guess、depcomp 或 ltmain.sh 存储在 SVN 存储库中吗?

使用用户提供的值替换 HTML 文件中的文本的 Python 脚本

c++指向const类成员的指针问题

Python "or"在 Swift 中等效?

c++ - 如何以相反的顺序返回字符串

c++ - 使用 'std::algorithm' 无显式循环迭代自定义对的 vector

linux - Autotools 主目录

Python 类 - 每个类调用新的 id

python - Pyqt 鼠标悬停在 QPushButton 上