【问题标题】:Are there any disadvantages in using a Makefile.am over setup.py?在 setup.py 上使用 Makefile.am 有什么缺点吗?
【发布时间】:2016-09-19 00:04:17
【问题描述】:

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

该项目主要基于 c++,但也包括一些用 python 编写的模块。经过大量阅读 autotools 后,我终于可以创建一个共享库,编译并链接一个可执行文件,并安装 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=scripts/script1 scripts/script2 scripts/script3

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

【问题讨论】:

  • Autotools 太糟糕了。我什至无法开始......这是一个例子:voices.canonical.com/jussi.pakkanen/2011/09/13/autotools
  • 哈。是的,我已经读过那个了。上周我读了很多意见。到目前为止,我并不讨厌 autotools(至少在拔头发的最初几天之后),但我确实讨厌我们当前的 scons 实现。
  • 你考虑过使用 cmake 吗?我并不是说这是相反的,老实说,我也不喜欢 cmake 的一些事情。但根据我的经验,cmake 比 autotools 痛苦少得多,它主要是可以工作的,如果你有问题,找到有用的信息并不难。对于自动工具,我绝对不能这么说。
  • 我确实考虑过使用 cmake,但安装时需要它似乎很烦人。特别是考虑到我们的软件将在用户没有管理员权限甚至根本不了解安装软件包的计算机集群上大量使用。我想我的一部分也觉得对自动工具有点投入,现在我终于知道如何使用它了。
  • 不是关于 scons 的真正问题,所以也许删除那个标签..

标签: python c++ autotools automake distutils


【解决方案1】:

根据您的描述,我建议您使用库存自动工具生成的configureMakefile,即autoconfautomake,构建您的项目,并使用您的configure 或@987654326 @注意执行你的setup.py,以便设置你的Python位。

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

在我的Makefile(从Makefile.am 生成)中,我有一个执行Perl 模块的Makefile.PL 的目标,它类似于Python 的setup.py,并以这种方式与其余模块一起构建Perl 模块的 C++ 代码,无缝地结合在一起,作为一个单一的构建。效果不错。

automake's Makefile.am 非常开放和灵活,可以很容易地调整和扩展以合并外部位,例如这些。

【讨论】:

  • 好的,谢谢!所以保留 setup.py,并通过 make 执行它。如果你能详细说明你是如何做到这一点的,那就太好了。你会在 Python 模块目录中的 Makefile.am 中创建一个安装钩子吗?
  • 我假设“setup.py”实际上并没有在 $(DESTDIR) 中安装任何东西,但它类似于 autotools 配置脚本;并且需要执行其他命令才能将 python 模块安装到 $(DESTDIR) 中。在这种情况下,我会使用“BUILD_SOURCES=python.setup.done”之类的东西和一个规则来构建“python.setup.done”,比如“python $(srcdir)/setup.py; touch python.setup.done ",然后让 install-hook 执行将文件安装到 $(DESTDIR) 所需的任何操作。
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
相关资源
最近更新 更多