You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Conan打包时排除源代码,仅保留头文件与编译后的静态库?

无源码Conan包创建方案

以下为适配Conan 1.x版本的可行实现方案:

方案1:使用conan export-pkg直接打包预编译产物(最推荐)

该方案完全跳过源码导出逻辑,从根源避免源码被打包进配方:

  • 第一步:本地完成源码编译,将生成的.h头文件、静态库文件(.a/.lib)分别整理到本地目录的include、lib子目录中,例如统一存放在项目根目录的artifact_output文件夹下
  • 第二步:编写conanfile.py,无需配置exports、exports_sources字段,也无需实现build()方法,仅编写package()和package_info()逻辑即可,参考示例:
from conans import ConanFile

class SelfDevelopedLibConan(ConanFile):
    name = "your_lib_name"
    version = "1.0.0"
    settings = "os", "compiler", "build_type", "arch"

    def package(self):
        # 直接复制本地预编译产物到包目录
        self.copy("*.h", dst="include", src="artifact_output/include")
        self.copy("*.a", dst="lib", src="artifact_output/lib")
        self.copy("*.lib", dst="lib", src="artifact_output/lib")

    def package_info(self):
        # 声明链接时需要的库名
        self.cpp_info.libs = ["your_lib_name"]
  • 第三步:执行conan export-pkg . your_lib_name/1.0.0@your_namespace/your_channel命令完成打包,该命令只会将package()方法指定的产物纳入包中,不会生成conan_sources.tgz源码压缩包

方案2:使用post_export钩子自动清理源码包(适配conan create流程)

如果必须使用conan create全流程构建,可在conanfile.py中添加导出后钩子,自动删除生成的源码包:

  • 在conanfile.py中添加如下方法:
def post_export(self):
    import os
    source_tgz_path = os.path.join(self.export_folder, "conan_sources.tgz")
    if os.path.exists(source_tgz_path):
        os.remove(source_tgz_path)
  • 正常执行conan create命令即可,导出完成后源码包会被自动删除,不会随配方上传到Artifactory

结果验证

打包完成后可执行conan get your_lib_name/1.0.0@your_namespace/your_channel查看配方导出目录的文件列表,确认不存在conan_sources.tgz即可。最终上传到Artifactory的包仅包含头文件、编译后的静态库与配方文件,无任何.cpp源码泄露风险。

内容的提问来源于stack exchange,提问作者Chikashi Miyama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:48:00