我想知道如何智能地管理Linux(Ubuntu)上的一些第三方C ++依赖项的构建和安装。我目前设置的方式是git-lfs,包含所有必需的压缩第三方源。然后我使用我编写的shell脚本来安装所有必要的系统依赖项,然后解压缩并构建所需的库。此shell脚本还负责设置所有路径,以便我们的源代码可以轻松链接到第三方库。
我们脚本的示例命令是./install opencv或./install everything
然而,在几个月内,脚本已经变得非常大并且有时在某些库已经安装或其他小问题时中断。因此,我想用一些更聪明和有用的东西来代替它。我目前一直在研究编写某种python脚本,但只是将语言从shell更改为python并不是一个很大的优势。所以我在寻找是否有任何特定的python库可以帮助我管理这些库。
我已经研究过像厨师和其他自动化构建的东西,但这对我正在进行的小项目来说太过分了。
我想知道其他人用于第三方管理的东西,遗憾的是C ++没有像pip这样的东西。
答案 0 :(得分:0)
我使用jhbuild
来做这种事情(如果我理解你正确地做了什么)。它来自GNOME项目(他们使用它从源代码构建整个桌面),但它可以很容易地为任何项目集进行自定义。最近在Ubuntus中打包的jhbuild
运行正常。
您编写了一些XML来描述每个项目:在何处下载源代码,应用哪些修补程序,使用哪些配置标志,依赖于哪些项目等等;然后,当您输入jhbuild build mything
时,它会确定要构建的内容以及以什么顺序构建并继续使用它。它在变化方面相当聪明,因此如果您在构成堆栈的其中一个项目中编辑源文件,它只会重建受影响的部分。
例如,我有fftw3这个优秀的快速傅里叶变换库:
<autotools id="fftw3"
autogen-sh="configure"
autogenargs="--disable-static --enable-shared --disable-threads"
>
<branch
repo="fftw"
module="fftw-3.3.4.tar.gz"
/>
<dependencies>
<dep package="libiconv"/>
</dependencies>
</autotools>
可能有明显的含义。这是从发布tarball构建的,但它也可以从git构建。它对cmake
个项目感到满意。 jhbuild
是用Python编写的,因此定制起来很简单。感谢GNOME,包含了许多常用库。
我实际上用它来构建Windows二进制文件。您可以将其设置为使用交叉编译器构建所有内容,然后将其放入Docker中。它使任何人都可以在(几乎)任何平台上构建大型复杂的应用程序。当然,您也可以使用它来进行自动夜间构建。
周围可能有更好的东西,但它对我来说效果很好。