我有一个项目,它使用3-4个不同的开源C/C++库。
我为几个平台构建了这些库,并在我的项目中为不同的平台签入了包含文件和静态库。
然而,我为几个问题而挣扎。所有这些项目都围绕着依赖关系管理。我正在寻求最佳实践建议。
我没有办法获得静态库的版本。因此,我需要跟踪我使用的静态库的哪个版本(可能是构建它的提交的SHA )?
当我需要弄清楚什么时候升级这些库时,这一点特别重要。
我本可以为一个特定的平台构建一些特定的库。我花了一段时间才弄明白。
下一次我需要构建相同的库时,可能需要半年时间(因为任何原因我都需要升级。然而,到那时,我肯定不会记得任何事情,而建造它的环境也会消失很久。
这是一个较小的关切。然而,这仍然是一个问题。确保构建是可复制的(这需要源代码),这是很好的。
发布于 2016-12-29 09:02:57
您真的需要始终使用依赖库的精确版本吗?它是否写得很糟糕/它是否破坏了它的API,每次版本都有轻微的增加?
如果您查看开放源码项目,它们的构建(主要是configure部分)脚本会检查是否存在各种库,如果没有,则抛出一个错误。它还具有足够的灵活性,允许用户根据库的较新版本进行链接(这可能比旧版本的版本提供更多的bug/安全修复),而且也不强制静态或动态链接。
如果您确实需要可重复的构建,那么您还应该注意编译器的确切版本和它的标准库,甚至可能是操作系统。在这种情况下,在我看来,拥有一个具有所需环境的构建机器比在源代码存储库中检入编译库要好。
发布于 2016-12-29 09:56:47
我怎么知道我到底用了什么?
如果包含文件或libs文件尚未包含版本号,则自己向每个lib文件夹添加一个文本文件"version.txt“(包含版本号),并将其与库和包含文件一起签入您的VCS中。但是,如果您对lib的完整源代码进行了版本化(第3点),则很有可能已经有一个包含版本号的源代码文件,因此在这种情况下不需要维护自己的源代码。
我如何复制构建?
尽可能多地自动化。使用您最喜欢的构建工具的脚本、makefile或文件。将所有这些都置于源代码管理之下。如果需要手动步骤,请将详细信息写入文本文件(例如,readme_build.txt),并将其置于源代码管理之下。
我是否应该将这些库分叉以获得源代码的副本?
您应该有源代码的副本,但只有在必要时才能使用叉子(例如,如果您遇到了紧急错误,而原始作者无法在您的时间限制内修复它)。或者,如果作者使用与您不同的编译器环境,并且有必要进行一些更改以使lib在您的环境中工作。但是,请注意,在您的叉子中对原始源代码的每一次更改都很可能会使以后的更新更难集成。
尽管如此,我还是建议您获得您正在使用的lib的原始(未分叉)源代码的副本。这将允许您稍后在必要时对库进行分叉或维护,即使原始维护者决定从公共web撤消lib源。
https://softwareengineering.stackexchange.com/questions/339046
复制相似问题