作者:周杰
链接:https://www.zhihu.com/question/263416411/answer/268970544
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/263416411/answer/268970544
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作为vcpkg主要贡献者之一(Microsoft/vcpkg下面的sdcb就是我),我觉得vcpkg主要贡献在于解决了c++/vc++很大的短板。
如果要做一个应用程序,我们往往会用到很多第三方库,这时库包管理工具就很重要,如js/npm,c#/nuget,php/composer之类,但vc++一直没一个很舒服的包管理工具。很多c++第三方库对vc++都非常不友好,谁能轻而易举地在vc++上编译一个openssl呢?nuget出现试图解决这个问题,但出现更大的问题就是直接下载二进制文件,太大,下载了一个vs2012的又不支持vs2013,版本之间很难共用,想去调一下配置又不可能(因为下载的是二进制文件)。我还记得曾经为编译一个boost看配置、折腾半天。举个例子,我为mysql做了一个vcpkg包,更是折腾。而这时vcpkg就诞生了,解决了上述所有的问题,比如装一个mysql客户端,你只需要:
vcpkg install libmysql
就行了,你不需要知道我当时为了调通这个包在之后做了多少次编译、重新编译、修改配置、加入patch、兼容vs2015/vs2017之类的工作,it just works。如果它没按你想象中那样工作,你还可以看日志,稍微改一下配置,如果有bug还可以立马提PR,几位MSFT的维护者都非常勤快,基本可以很快就看到就反馈意见或merge。
当然vcpkg还有很多缺点,之前MSFT的维护者就联系过我聊过,我觉得vcpkg的问题有:
- 有些包或有些包的某些环境,质量太低,之前我经历过有些包安装了好几个小时之后编译失败,或者运行时报错,那是非常非常不爽(所以我提了很多PR)
- 包能安装的环境配置,是通过cmake代码来完成,这一块我觉得应该放在配置中(作者也同意,并表示计划改),这样就可以尽早的从配置不支持中报错返回而不是等几个小时编译后才失败
- 社区互动。现在知道vcpkg的少,用vcpkg的人更不多,微软的维护者也跟我说最希望在vcpkg中看到的就是社区互动,希望大家关注vcpkg,试试vcpkg,说说它的好与不好。
- CI(持续集成),也是为了提高质量。现在vcpkg后台有一定的CI,但远远不够。现在的CI主要跑了一些安装之类的流程,但没有具体与跑每一个包下的每一个配置。这就导致如果包之类有显式或潜在的依赖,改了一个包就可能让另一个包炸了,这也是可以提升的地方,微软的维护者也说在working on it.
然后我也希望大家关注vcpkg,试试vcpkg,说说它的好与不好的地方,一起改进。