使用 Makefile.am 而不是 setup.py 有什么缺点吗?
Are there any disadvantages in using a Makefile.am over setup.py?
我正在努力将一个项目从 scons 过渡到 autotools,因为它似乎会自动生成很多在 SConscript 中编写时很烦人的功能(例如 make uninstall
)。
该项目主要基于 c++,但也包括一些用 python 编写的模块。在大量阅读 autotools 之后,我终于可以创建一个共享库,针对它编译和 link 一个可执行文件,并安装 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
这似乎将我所有的模块和脚本都放在了适当的位置,但我想知道这是不是 "correct",因为安装 python 模块的方式似乎是通过一个 setup.py 通过 distutils 脚本。我在 python 模块中确实有 setup.py 脚本,并且 scons 一直在调用它们,直到我使用 autotools 进军。一种方法优于另一种方法吗?当我使用 autotools 构建时,我是否仍应使用 setup.py?我想了解人们通常如何使用 autotools 使用 c++ and python 模块解析构建。我还有很多其他的 autotools 问题,但我会留到以后再说。
根据您的描述,我建议您使用原装自动工具生成的 configure
和 Makefile
,即 autoconf
和 automake
构建您的项目,以及让您的 configure
或 Makefile
负责执行您的 setup.py
,以便设置您的 Python 位。
我有一个主要由 C/C++ 代码和 Perl 模块组成的项目。这与您尝试做的非常相似,只是它是 Perl 而不是 Python.
在我的 Makefile
(从 Makefile.am
生成)中,我有一个执行 Perl 模块的 Makefile.PL
的目标,类似于 Python 的 [=16] =],并以这种方式将 Perl 模块与其余 C++ 代码无缝地构建在一起,作为一个单独的构建。效果还不错。
automake's
Makefile.am
非常开放和灵活,可以轻松调整和扩展以包含外部位,例如这些。
我正在努力将一个项目从 scons 过渡到 autotools,因为它似乎会自动生成很多在 SConscript 中编写时很烦人的功能(例如 make uninstall
)。
该项目主要基于 c++,但也包括一些用 python 编写的模块。在大量阅读 autotools 之后,我终于可以创建一个共享库,针对它编译和 link 一个可执行文件,并安装 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
这似乎将我所有的模块和脚本都放在了适当的位置,但我想知道这是不是 "correct",因为安装 python 模块的方式似乎是通过一个 setup.py 通过 distutils 脚本。我在 python 模块中确实有 setup.py 脚本,并且 scons 一直在调用它们,直到我使用 autotools 进军。一种方法优于另一种方法吗?当我使用 autotools 构建时,我是否仍应使用 setup.py?我想了解人们通常如何使用 autotools 使用 c++ and python 模块解析构建。我还有很多其他的 autotools 问题,但我会留到以后再说。
根据您的描述,我建议您使用原装自动工具生成的 configure
和 Makefile
,即 autoconf
和 automake
构建您的项目,以及让您的 configure
或 Makefile
负责执行您的 setup.py
,以便设置您的 Python 位。
我有一个主要由 C/C++ 代码和 Perl 模块组成的项目。这与您尝试做的非常相似,只是它是 Perl 而不是 Python.
在我的 Makefile
(从 Makefile.am
生成)中,我有一个执行 Perl 模块的 Makefile.PL
的目标,类似于 Python 的 [=16] =],并以这种方式将 Perl 模块与其余 C++ 代码无缝地构建在一起,作为一个单独的构建。效果还不错。
automake's
Makefile.am
非常开放和灵活,可以轻松调整和扩展以包含外部位,例如这些。