macos上conan的settings默认值常出错,因clt与xcode内置apple clang版本号不精确匹配(如15.0 vs 15.0.0.15000309),导致远程二进制查找失败;需显式设compiler.version=15.0、compiler.libcxx=libc++,并固化macos-clang profile。

macOS上Conan的settings默认值为什么经常出错
Conan在macOS下默认不设compiler.version和compiler.libcxx,但Xcode命令行工具(CLT)和完整Xcode安装行为不同:CLT可能用apple-clang 15.0,而Xcode 15.4实际带的是apple-clang 15.0.0.15000309。版本号不精确匹配会导致Conan找不到远程二进制,强制触发本地构建——哪怕Conan Center明明有对应包。
实操建议:
- 运行
xcode-select -p确认当前工具链路径;若输出含CommandLineTools,用conan profile update settings.compiler.version=15.0 default显式设版本 - 始终指定
compiler.libcxx=libc++(macOS唯一支持的C++标准库),否则Conan可能误推断为libstdc++并失败 - 避免依赖
defaultprofile,新建macos-clangprofile并固化:[settings] os=Macos arch=x86_64 compiler=apple-clang compiler.version=15.0 compiler.libcxx=libc++ build_type=Release
CMakeToolchain在macOS生成的toolchain文件缺编译器路径
Conan 2.x的CMakeToolchain生成器默认不写CMAKE_CXX_COMPILER,而macOS上CMake常因找不到clang++路径报Could not find compiler set in environment variable CXX。这不是Conan bug,是它把编译器发现逻辑留给CMake本身,但macOS的xcode-select环境变量未被自动注入。
实操建议:
- 执行
conan install时加--conf tools.cmake.cxx_compiler_path="$(which clang++)"手动传入路径 - 或在profile里补全:
[conf] tools.cmake.cxx_compiler_path=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
- 验证生成的
conan_toolchain.cmake里是否含set(CMAKE_CXX_COMPILER "...")行
macOS的dylib签名和rpath问题怎么让Conan不踩坑
Conan安装的依赖默认不处理codesign和@rpath,但macOS 10.15+要求可执行文件及动态库必须签名,且dyld加载时严格校验rpath。常见现象是程序能编译通过,运行时报Library not loaded: @rpath/libfmt.dylib或code signature not valid。
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
实操建议:
- 在
conanfile.py中启用self.cpp_info.set_property("cmake_find_mode", "both"),确保CMake链接时自动注入rpath - 构建后手动签名:用
codesign --force --deep --sign - <your_binary></your_binary>,注意--deep必须加,否则子依赖dylib不被递归签名 - 若用
CMakeDeps生成器,检查生成的fmt-config.cmake是否含set_target_properties(fmt::fmt PROPERTIES INSTALL_RPATH "@loader_path/../lib")
Homebrew装的OpenSSL和Conan装的冲突怎么办
macOS用户常同时用Homebrew和Conan管理OpenSSL——前者全局安装在/opt/homebrew,后者按项目隔离在~/.conan2/p/b/...。CMake优先找到Homebrew路径会导致链接失败:头文件版本和dylib ABI不匹配,报undefined symbol: OPENSSL_sk_num这类符号错误。
关键点在于CMake的find_package(OpenSSL)行为不可控,它会扫系统路径。
实操建议:
- 彻底禁用系统查找:在
CMakeLists.txt开头加set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON),强制只用Conan生成的OpenSSLConfig.cmake - 删掉
find_package(OpenSSL),改用find_package(OpenSSL REQUIRED CONFIG)——CONFIG模式跳过FindOpenSSL.cmake脚本 - 确认
conan install输出里有OpenSSL/3.0.10: Already installed!,而非Using system package
Conan在macOS上最易被忽略的其实是profile中os.version字段:它影响SDK路径(如macosx13.3.sdk),但多数人直接留空,导致Xcode升级后编译失败。真要稳定,得写成os.version=13.3并随Xcode版本更新。










