我正在努力将项目从scons过渡到自动工具,因为我似乎会自动生成许多烦人的用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.pysubmoda_PYTHON=autopy/submoda/moda.py autopy/submoda/modb.py autopy/submoda/modc.py autopy/submoda/__init__.pysubmodb_PYTHON=autopy/submodb/moda.py autopy/submodb/modb.py autopy/submodb/modc.py autopy/submodb/__init__.pyautopydir=$(pythondir)/autopysubmodadir=$(pythondir)/submodasubmodbdir=$(pythondir)/submodbdist_bin_SCRIPTS=scripts/script1 scripts/script2 scripts/script3
这似乎将我所有的模块和脚本都放置在适当的位置,但是我想知道这是否“正确”,因为安装python模块的方法似乎是通过distutils通过setup.py脚本进行的。我确实在python模块中有setup.py脚本,并且scons一直在调用它们,直到我使用自动工具。一种方法优于另一种方法吗?使用自动工具进行构建时,是否仍应使用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's Makefile.am非常开放且灵活,可以轻松地进行修改和扩展,以包含诸如此类的外来位。

09-25 22:23