Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 加快安装依赖项的想法_C++_Continuous Integration_Travis Ci_Build Dependencies - Fatal编程技术网

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) 它为我留下了最少的工作来更新构建

我有一个项目,它依赖于许多外部库,如GLFW3、GLEW、GLM、FreeType2、zlib等。最好在作业之间存储/共享已安装的依赖项,这样它就不必一直下载/安装它们,而这需要大约一半的时间。我可以看到一些处理方法:

a) 对于每个生成的每个作业,请下载依赖项并安装它们

b) 将依赖项(源代码)放在我的repo中,速度几乎没有提高,因为我不再需要从外部服务器下载它们(仍然需要编译和安装它们)

c) 手工编译,放在一些服务器上,然后为每个构建下载合适的包


a) 它为我留下了最少的工作来更新构建和测试的依赖项,允许使用最新版本来构建我的项目,但它需要花费最多的时间(编译和下载)

b) 使用额外的代码(不是我的代码)扩充存储库,速度几乎没有提高(下载通常不会太慢),添加手动工作来更新依赖项,我想比a更糟糕)

c) 速度最快,但需要我做大量工作来不断更新构建的依赖项,并将它们上传到fast服务器上(每个构建任务(编译器等)也会有所不同),从而实现最快的构建(只需下载和复制/安装)

那么,您如何管理外部依赖项并使它们在travis构建中保持最新


请注意,我使用Travis的免费版本,需要sudo来更新cmake、gcc等并安装依赖项。。。可能会以某种方式欺骗CMake使用依赖项的本地版本,而不是/usr/。。。但这在某种程度上夸大了CMake,我认为它应该非常简单和清晰。

让我们将构建在某个时间点所需的整个依赖项集称为依赖项“列表”

我将在您的构建中使用(某个版本的)列表更新列表版本的任务分开(当需要依赖项的新版本时)-不必要地将它们混合在一起会使情况复杂化IMHO(我假设您的许多构建将使用相同的依赖项列表版本)

让我们先看看阵容的使用

根据您的描述,(已经构建的)依赖项的安装对所有3个选项都是通用的,并且在每次构建时都会执行,所以现在让我们暂时把它放在一边

两种方法之间的区别仅在于如何获得构建的依赖关系:

  • a-在每次构建时从外部服务器下载
  • b每次构建时从回购来源构建
  • c-在每次构建时从本地fast服务器下载它们
似乎ac基本相同,只是c由于本地访问速度更快。最有可能的是b速度最慢

因此,在这种情况下,c似乎是构建速度预期的赢家

现在的问题是,对于c方法,是否/如何在本地服务器上更快地获得构建的依赖项列表。我看到两个选项(不确定它们在您的环境中是否都可能):

  • 下载已构建的依赖项(就像您在a中所做的那样) 方法)从外部服务器(实际上只是将它们缓存在 本地服务器)
  • 从源代码本地构建依赖项,除非您不必将这些源代码与项目放在同一个repo中,也不必为每个项目构建构建它们(如在b方法中)-您只需要在更新列表时执行此操作(并且仅适用于相应依赖项的新版本)
  • 您还可以研究两个选项的混合:一些依赖项使用选项1,其他依赖项使用选项2,这是您认为合适的

    现在,如果您正在为构建机器使用VM(或docker或类似)映像,并且您可以控制这些映像,那么通过自定义这些VM映像,您可能会显著加快构建速度—在这些映像上安装依赖项列表,使它们立即可用于运行这种定制映像的机器上的任何构建


    最后,当需要更新你的依赖列表时(顺便说一句,它应该出现在你的ab方法中,而不仅仅是c方法中),你只需下载新的依赖版本,如果需要,构建它们,将构建的依赖项存储在本地fast服务器上,如果定制的VM映像解决方案适合您,则在安装新的依赖项列表时更新/重新创建定制的VM映像。

    让我们将构建所需的整个依赖项集称为依赖项“列表”

    我将在您的构建中使用(某个版本的)列表更新列表版本的任务分开(当需要依赖项的新版本时)-不必要地将它们混合在一起会使情况复杂化IMHO(我假设您的许多构建将使用相同的依赖项列表版本)

    让我们先看看阵容的使用

    根据您的描述,(已经构建的)依赖项的安装对所有3个选项都是通用的,并且在每次构建时都会执行,所以现在让我们暂时把它放在一边

    两种方法之间的区别仅在于如何获得构建的依赖关系:

    • a-在每次构建时从外部服务器下载
    • b每次构建时从回购来源构建
    • c-在每次构建时从本地fast服务器下载它们
    这似乎是一个好主意<