使用Makefile.am而不是setup.py有什么缺点吗?

时间:2016-05-21 22:00:42

标签: python c++ autotools automake distutils

我正在努力将项目从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问题,但我会保留这些问题。

1 个答案:

答案 0 :(得分:2)

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

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

在我的Makefile(从Makefile.am生成)中,我有一个执行Perl模块Makefile.PL的目标,类似于Python {{1}以这种方式,我将Perl模块与其余的C ++代码一起构建,作为单个构建无缝地组合在一起。工作得很好。

setup.py automake's是非常开放和灵活的,可以很容易地进行调整和扩展,以包含外部位,就像这些。