无install目标的GitHub C++库能否通过vcpkg使用?
在vcpkg中集成无install目标的cpp-dotenv库
当然可以通过自定义vcpkg port实现,无需修改或fork原仓库,以下是具体步骤:
1. 创建自定义port目录
在你的vcpkg安装目录下的ports文件夹中,新建一个名为cpp-dotenv的子目录,然后在该目录下创建三个必要文件:
portfile.cmake
这个文件负责下载源码、编译并手动复制库文件(因为原库没有install目标):
vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO laserpants/dotenv-cpp REF v4.0.0 # 替换为你需要的版本号 SHA512 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef # 替换为对应版本的SHA512哈希值 HEAD_REF master ) vcpkg_cmake_configure( SOURCE_PATH "${SOURCE_PATH}" ) vcpkg_cmake_build() # 复制头文件到vcpkg的include目录 file(COPY "${SOURCE_PATH}/include" DESTINATION "${CURRENT_PACKAGES_DIR}/include") # 根据目标系统复制编译后的库文件 if(VCPKG_TARGET_IS_WINDOWS) file(COPY "${SOURCE_PATH}/build/Debug/dotenv.lib" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib") file(COPY "${SOURCE_PATH}/build/Release/dotenv.lib" DESTINATION "${CURRENT_PACKAGES_DIR}/lib") else() file(COPY "${SOURCE_PATH}/build/libdotenv.a" DESTINATION "${CURRENT_PACKAGES_DIR}/lib") file(COPY "${SOURCE_PATH}/build/libdotenv.a" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib") endif()
vcpkg.json
定义包的元数据:
{ "name": "cpp-dotenv", "version-string": "4.0.0", "description": "C++17库,用于读取.env配置文件", "homepage": "https://github.com/laserpants/dotenv-cpp", "license": "MIT", "dependencies": [] }
CONTROL
vcpkg识别包的配置文件:
Source: cpp-dotenv Version: 4.0.0 Description: C++17库,用于读取.env配置文件 Homepage: https://github.com/laserpants/dotenv-cpp License: MIT
2. 安装并使用自定义包
在你的项目vcpkg.json中添加依赖:
{ "dependencies": [ "cpp-dotenv" ] }
运行vcpkg install,vcpkg会自动下载、编译并将库文件安装到本地缓存,之后就可以在CMake项目中正常链接该库。
注意事项
- 版本号和SHA512哈希值需要匹配:下载对应版本的源码包后,用
vcpkg hash --sha512 <包路径>生成哈希值 - 如果原库的编译输出路径与示例不同,需调整
portfile.cmake中的复制路径 - 该方法完全基于vcpkg的port机制,无需修改原仓库代码
原仓库中「添加vcpkg支持」的请求内容翻译:
希望能为dotenv-cpp添加vcpkg支持,让用户可以通过vcpkg直接安装该库,无需手动处理依赖和编译流程。目前该库未纳入vcpkg官方仓库,请求维护者或社区贡献者提供对应的port配置,以集成到vcpkg生态中。
内容的提问来源于stack exchange,提问作者Scott Wood
相关产品推荐
相关产品推荐

