C++ 加快安装依赖项的想法
我有一个项目,它依赖于许多外部库,如GLFW3、GLEW、GLM、FreeType2、zlib等。最好在作业之间存储/共享已安装的依赖项,这样它就不必一直下载/安装它们,而这需要大约一半的时间。我可以看到一些处理方法: a) 对于每个生成的每个作业,请下载依赖项并安装它们 b) 将依赖项(源代码)放在我的repo中,速度几乎没有提高,因为我不再需要从外部服务器下载它们(仍然需要编译和安装它们) c) 手工编译,放在一些服务器上,然后为每个构建下载合适的包C++ 加快安装依赖项的想法,c++,continuous-integration,travis-ci,build-dependencies,C++,Continuous Integration,Travis Ci,Build Dependencies,我有一个项目,它依赖于许多外部库,如GLFW3、GLEW、GLM、FreeType2、zlib等。最好在作业之间存储/共享已安装的依赖项,这样它就不必一直下载/安装它们,而这需要大约一半的时间。我可以看到一些处理方法: a) 对于每个生成的每个作业,请下载依赖项并安装它们 b) 将依赖项(源代码)放在我的repo中,速度几乎没有提高,因为我不再需要从外部服务器下载它们(仍然需要编译和安装它们) c) 手工编译,放在一些服务器上,然后为每个构建下载合适的包 a) 它为我留下了最少的工作来更新构建
a) 它为我留下了最少的工作来更新构建和测试的依赖项,允许使用最新版本来构建我的项目,但它需要花费最多的时间(编译和下载) b) 使用额外的代码(不是我的代码)扩充存储库,速度几乎没有提高(下载通常不会太慢),添加手动工作来更新依赖项,我想比a更糟糕) c) 速度最快,但需要我做大量工作来不断更新构建的依赖项,并将它们上传到fast服务器上(每个构建任务(编译器等)也会有所不同),从而实现最快的构建(只需下载和复制/安装) 那么,您如何管理外部依赖项并使它们在travis构建中保持最新
请注意,我使用Travis的免费版本,需要sudo来更新cmake、gcc等并安装依赖项。。。可能会以某种方式欺骗CMake使用依赖项的本地版本,而不是/usr/。。。但这在某种程度上夸大了CMake,我认为它应该非常简单和清晰。让我们将构建在某个时间点所需的整个依赖项集称为依赖项“列表” 我将在您的构建中使用(某个版本的)列表与更新列表版本的任务分开(当需要依赖项的新版本时)-不必要地将它们混合在一起会使情况复杂化IMHO(我假设您的许多构建将使用相同的依赖项列表版本) 让我们先看看阵容的使用 根据您的描述,(已经构建的)依赖项的安装对所有3个选项都是通用的,并且在每次构建时都会执行,所以现在让我们暂时把它放在一边 两种方法之间的区别仅在于如何获得构建的依赖关系:
- a-在每次构建时从外部服务器下载
- b每次构建时从回购来源构建
- c-在每次构建时从本地fast服务器下载它们
最后,当需要更新你的依赖列表时(顺便说一句,它应该出现在你的a和b方法中,而不仅仅是c方法中),你只需下载新的依赖版本,如果需要,构建它们,将构建的依赖项存储在本地fast服务器上,如果定制的VM映像解决方案适合您,则在安装新的依赖项列表时更新/重新创建定制的VM映像。让我们将构建所需的整个依赖项集称为依赖项“列表” 我将在您的构建中使用(某个版本的)列表与更新列表版本的任务分开(当需要依赖项的新版本时)-不必要地将它们混合在一起会使情况复杂化IMHO(我假设您的许多构建将使用相同的依赖项列表版本) 让我们先看看阵容的使用 根据您的描述,(已经构建的)依赖项的安装对所有3个选项都是通用的,并且在每次构建时都会执行,所以现在让我们暂时把它放在一边 两种方法之间的区别仅在于如何获得构建的依赖关系:
- a-在每次构建时从外部服务器下载
- b每次构建时从回购来源构建
- c-在每次构建时从本地fast服务器下载它们