本目录用于推送 Conan v2 格式的包到远程仓库。
/Users/silky/Desktop/code/workspace/artifactory/env-conan2/Users/silky/Desktop/code/workspace/artifactory/bin/conan2推送本地 Conan v2 包到远程仓库。
用法:
./push_v2.sh -u <URL> -t <TOKEN> [OPTIONS]
必填参数:
-u, --url URL: 远程仓库 URL-t, --token TOKEN: 访问 token可选参数:
-r, --remote NAME: 远程仓库名称(默认: cnb-conan-repo)-n, --name NAME: 包名(默认从 conanfile.py 自动识别)-v, --version VERSION: 版本号(默认从 conanfile.py 自动识别)--username USERNAME: 用户名(默认: cnb)示例:
# 基本用法(自动识别 name 和 version)
./push_v2.sh -u https://conan.cnb-dev.woa.com/silky_dev/conan-cnb-test/-/packages/ \
-t YOUR_TOKEN
# 指定 name 和 version
./push_v2.sh -u https://conan.cnb-dev.woa.com/silky_dev/conan-cnb-test/-/packages/ \
-t YOUR_TOKEN -n hello -v 2.0.0
从公共仓库下载三方包并推送到 Conan v2 私有仓库。
用法:
./push_third_party.sh -p <PACKAGE> -u <URL> -t <TOKEN> [OPTIONS]
必填参数:
-p, --package PACKAGE: 包名/版本(格式: name/version)-u, --url URL: 目标仓库 URL-t, --token TOKEN: 目标仓库 token可选参数:
-s, --source REMOTE: 源仓库名称(默认: conancenter)-r, --remote NAME: 目标仓库名称(默认: 自动生成)--username USERNAME: 目标仓库用户名(默认: _)--recipe-only: 仅推送 recipe,不推送 binaries示例:
# 推送 zlib/1.3.1
./push_third_party.sh -p zlib/1.3.1 \
-u https://conan.cnb-dev.woa.com/silky_dev/conan-cnb-test/-/packages/ \
-t YOUR_TOKEN
# 推送 boost(仅 recipe)
./push_third_party.sh -p boost/1.84.0 \
-u https://conan.cnb-dev.woa.com/silky_dev/conan-cnb-test/-/packages/ \
-t YOUR_TOKEN --recipe-only
批量推送多个三方包。
用法:
./batch_push_third_party.sh -f <FILE> -u <URL> -t <TOKEN> [OPTIONS]
包列表文件格式 (packages.txt):
zlib/1.3.1 boost/1.84.0 fmt/10.2.1
示例:
./batch_push_third_party.sh -f packages.txt \ -u https://conan.cnb-dev.woa.com/silky_dev/conan-cnb-test/-/packages/ \ -t YOUR_TOKEN
本目录的 conanfile.py 使用 Conan v2 语法:
from conan import ConanFile # 注意是 conan,不是 conans
from conan.tools.cmake import CMake, cmake_layout
from conan.tools.files import copy
class HelloConan(ConanFile):
name = "hello"
version = "1.0.0"
def layout(self):
cmake_layout(self) # v2 新增的 layout
def package(self):
copy(self, "*.h", ...) # v2 使用 tools.files.copy
关键点:
from conan import ...(v2 使用 conan,v1 使用 conans)from conan.tools.cmake import CMakefrom conan.tools.files import copycmake_layout() 方法name/version@user/channel(需要 @)name/version(不需要 @,user/channel 已移除)conan remote login <remote> <user> -p <token> (v1 使用 conan user)conan create . --name=<name> --version=<version> (v1 使用 reference)conan upload <name/version> -r <remote> -c (v1 使用 --all --confirm)~/.conan/~/.conan2/# v1
from conans import ConanFile, CMake, tools
# v2
from conan import ConanFile
from conan.tools.cmake import CMake, cmake_layout
from conan.tools.files import copy, get
原因:脚本使用了 v1 的 conan user 命令
解决:确认脚本使用的是 conan2 命令,登录改用 conan remote login
原因:使用了 v1 语法
解决:检查导入语句,应该是 from conan import ...(不是 conans)
原因:未导入 layout 工具
解决:添加 from conan.tools.cmake import cmake_layout