vcpkg官方虽然有比较详细的教程指导你创建私有port,但依然会遇到很多摸不着头脑的问题,毕竟vcpkg很新,传统的c++开发者习惯了路径依赖的方式关联各种第三方库,所以即便你认识了一个十多年的C/C++开发经验的朋友也未必能提供给你帮助,最终还是要靠自己摸索,这里我做个存档记录摸索的结果,下面是一个用github项目制作的案例。
include(vcpkg_common_functions)
set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/${PORT})
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
# 指定项目来源(github账户名/项目名)
REPO account_name/project_name
# 发布的release版本号,其实就是tag名
REF v1.3
# 其实就是MD5,可以自己找工具算下,当然这边瞎写个字符串,当运行"./vcpkg install xxx"会提示你正确的SHA512,随后把正确的替换下即可
SHA512 d264e8e4feae25835bcd97097bab23e7df23d21004e57d881dd2076ecd1ffefdada97191331eb5d00dadadebfa1572deb473404cf6003b1f74db3464b3bbcd4a
# 指定代码分支名
HEAD_REF master)
# 如果项目没有托管在github等平台,甚至直接就是一个zip下载链接,替换为下面等方式即可
#vcpkg_download_distfile(ARCHIVE
# URLS "http://localhost:8080/project_name_v1.0.zip"
# FILENAME "project_name_v1.0.zip"
# SHA512 c9a216851989c20a29de35226ac2cd312736ecb2b2d795b556bc440dc58e578535bfe8ba2a73695bb10d958d1c0bccabc4d2b50b948877341e97ef0102a80ee9
#)
# 需要手动解压缩
#vcpkg_extract_source_archive(${ARCHIVE})
# cmake配置项目并尝试启用ninja编译选项
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA)
# Build and install a cmake project(照本宣科)
vcpkg_install_cmake()
# 拷贝pdb文件,pdb文件是便于开发期间程序调试
vcpkg_copy_pdbs()
# 这步很重要,它会将项目原本的cmake target重新定位到
# ${VCPKG_ROOT}/installed/x64-linux/share下,TARGET_PATH也可不设置,因为默认值就是`/share/${PORT}`:
vcpkg_fixup_cmake_targets(
CONFIG_PATH lib/cmake/${PORT}
TARGET_PATH /share/${PORT})
# vcpkg要求我们将程序编译产生的bug目录和文件都删除,否则会报错提示删除
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug)
# vcpkg要求我们将library的license相关文件拷贝到share里项目名目录下,否则报缺少license错误
file(
INSTALL ${SOURCE_PATH}/COPYING
DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}
RENAME copyright)
给vcpkg制作基于CONFIG的port其实步骤是很简单的,也很容易理解,即便代码是github、bitbucket、gitlab甚至http下载地址,但是想充分利用vcpkg做自定义库托管,最麻烦的不在这篇文章,制作vcpkg的port需要cmake项目提供完整的install功能,坑很多,网上的资料非常稀缺,而且错误的引导也多,因此我的这篇文章介绍了如何编写cmake的install过程。
网友评论