我想知道如何智能地管理第三方C 依赖性Linux(Ubuntu)的建筑物和安装。我目前设置的方式是一个具有所有必要压缩第三方来源的git-lfs。然后,我使用我写的shell脚本来安装所有必要的系统依赖项,然后解压缩并构建所需的库。此Shell脚本还需要注意设置所有路径,以便我们的源代码可以轻松地链接到第三方库。
我们脚本的示例命令是./install opencv或./install everything
但是,在过去的几个月中,脚本变得很大,有时会在某些库已经安装或其他次要问题时断开。因此,我想用一些更聪明和有用的东西代替它。我目前一直在考虑编写某种Python脚本,但是仅将语言从Shell更改为Python并不是很大的优势。因此,我希望是否有任何特定的Python库可以帮助我管理这些库。
我已经研究了厨师和其他自动化的东西之类的东西,但这对于我正在从事的小型项目来说是过分的。
我想知道其他人在这个第三方管理中使用了什么,因为可悲的是C 没有PIP。
我将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编写,因此自定义很容易。多亏了侏儒,包括许多常见的图书馆。
我实际上使用它来构建Windows二进制文件。您可以将其设置为使用交叉补偿器构建所有内容,然后将其放入Docker中。它使其成为任何人都能在任何平台(几乎)平台上构建大型且复杂的应用程序的单线。当然,您也可以使用它来进行自动化的夜间构建。
周围可能有更好的事情,但对我来说效果很好。