如何让conan build .始终使用指定工具链(独立于配置文件)构建项目及依赖并自动安装所需工具链?
如何让conan build .始终使用指定工具链(独立于配置文件)构建项目及依赖并自动安装所需工具链?
我来给你一套公司环境下通用的解决方案,既能强制统一工具链,又能自动搞定依赖安装,完美适配Ubuntu和Mac:
一、先搞定「强制指定工具链」的核心配置
我们需要创建一个公司专属的Conan Profile文件,把clang14、cmake3.20和统一的C标准都写死,不管用户机器默认是什么,都用这套配置。
在项目根目录新建一个叫company_profile的文件,内容如下(已经做了跨平台兼容):
[settings] # 全局强制clang 14和统一的C++标准(比如公司用C++17,按需修改) compiler=clang compiler.version=14 compiler.cppstd=17 # Ubuntu和Mac的libcxx差异处理 [settings_os=Linux] compiler.libcxx=libstdc++11 [settings_os=Macos] compiler.libcxx=libc++ # 自动安装指定版本的cmake [build_requires] cmake/3.20.6 # 如果想用Conan自动安装clang14(推荐,无需系统依赖),就加上下面这行 llvm/14.0.6 # 告诉Conan用我们指定的编译器 [conf] # 如果用Conan的llvm包,编译器路径这么写 tools.build:compiler_executables={"c": "@llvm_root@/bin/clang", "cpp": "@llvm_root@/bin/clang++"} # 如果想用系统安装的clang14,就改成下面的路径(Ubuntu是clang-14,Mac如果用brew装的是llvm@14/bin/clang++) # tools.build:compiler_executables={"c": "clang-14", "cpp": "clang++-14"}
二、让项目「强制绑定」这个Profile
光有Profile还不够,得防止用户不小心用了默认Profile构建。可以在项目的conanfile.py里加个校验逻辑:
from conans import ConanFile class YourProjectConan(ConanFile): settings = "os", "compiler", "compiler.version", "compiler.cppstd" # 其他项目配置... def configure(self): # 强制校验工具链,不符合就报错提示 if self.settings.compiler != "clang" or self.settings.compiler.version != "14": raise Exception("请使用项目根目录的company_profile构建!命令示例:conan build . --profile ./company_profile") # 强制统一C++标准,避免依赖用了不同版本 if self.settings.compiler.cppstd != "17": self.settings.compiler.cppstd = "17"
三、自动安装工具链的两种方案
方案1:用Conan自动下载预编译工具链(推荐)
上面Profile里的llvm/14.0.6和cmake/3.20.6都是Conan中心仓库里的包,运行构建命令时,Conan会自动下载、解压并配置好路径,完全不需要用户手动装系统包,也不用sudo权限,跨平台一致性拉满。
方案2:用系统包管理器自动安装(适合必须用系统工具链的场景)
如果公司要求必须用系统级的clang14,那可以在conanfile.py里加一段自动安装系统依赖的逻辑:
def system_requirements(self): from conans.model.system_requirements import SystemRequirements sys_req = SystemRequirements(self) if self.settings.os == "Linux": # Ubuntu下安装clang14及其依赖 sys_req.install(["clang-14", "libclang-14-dev", "llvm-14-dev"]) elif self.settings.os == "Macos": # Mac下用brew安装llvm14(前提是用户已经装了brew) sys_req.install(["llvm@14"])
这种方式需要用户有sudo权限(Ubuntu)或者已安装Homebrew(Mac),Conan会自动弹出提示让用户输入密码完成安装。
四、简化用户操作的小技巧
为了让同事们不用记复杂的命令,可以在项目根目录写个简单的构建脚本:
Linux/Mac的build.sh:
#!/bin/bash # 先安装依赖并配置环境 conan install . --profile ./company_profile # 开始构建 conan build .
给脚本加执行权限:chmod +x build.sh,之后同事们只需要运行./build.sh就搞定一切了。
Windows的build.bat(如果需要的话):
conan install . --profile ./company_profile conan build .
这样不管是Ubuntu还是Mac的同事,都能一键用统一的工具链构建项目和所有依赖,完美解决环境不一致的问题,后续升级工具链也只需要修改company_profile里的版本号就行。
备注:内容来源于stack exchange,提问作者glades
相关产品推荐
相关产品推荐

