现有的构建脚本可能同时为不同的配置 (如调试/发布) 或不同的体系结构 (32/64 位) 或库类型 (共享/静态) 构建二进制文件。如果在以前的 “单一配置包” 方法中使用这样的构建脚本,它肯定会毫无问题地工作。但是,我们将浪费宝贵的构建时间,因为我们将为每个包重建项目,然后为相关配置提取相关工件,而忽略其他工件。
    构建逻辑更有效,从而可以重用相同的构建来创建不同的包:

    N configs (1 build) -> N packages - 图1

    这可以通过在包配方中定义将指定逻辑的build_id() 方法来完成。

    1. settings = "os", "compiler", "arch", "build_type"
    2. def build_id(self):
    3. self.info_build.settings.build_type = "Any"
    4. def package(self):
    5. if self.settings.build_type == "Debug":
    6. #package debug artifacts
    7. else:
    8. # package release

    请注意,build_id() 方法使用self.info_build对象来更改构建哈希。如果方法没有改变它,哈希将与包文件夹 1 匹配。通过设置build_type="Any",我们强制对build_type的调试和发布值进行哈希处理 (特定字符串几乎不相关,只要两种配置相同)。请注意,构建哈希sha3 将不同于sha1sha2 包标识符。
    这并不意味着将有严格的一个构建文件夹。每个配置 (体系结构、编译器版本等) 都将有一个构建文件夹。因此,如果我们只有调试/发布构建类型,并且我们为N种不同的配置生成N个包,那么我们将拥有N/2 个构建文件夹,从而节省了一半的构建时间。

    阅读有关build_id() 更多信息。