我正在努力将项目从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问题,但我会保留这些问题。
答案 0 :(得分:2)
根据您的描述,我建议您使用库存自动工具生成的configure
和Makefile
,即autoconf
和automake
构建您的项目,并且您的configure
或Makefile
负责执行setup.py
,以便设置您的Python位。
我有一个主要是C / C ++代码的项目,以及一个Perl模块。这与您尝试做的非常相似,只不过它是Perl而不是Python。
在我的Makefile
(从Makefile.am
生成)中,我有一个执行Perl模块Makefile.PL
的目标,类似于Python {{1}以这种方式,我将Perl模块与其余的C ++代码一起构建,作为单个构建无缝地组合在一起。工作得很好。
setup.py
automake's
是非常开放和灵活的,可以很容易地进行调整和扩展,以包含外部位,就像这些。