主目标规则(例如“exe”或“lib”)创建一个顶级目标。您很可能希望声明自己的规则,并且有两种方法可以做到这一点。
第一种方法适用于您的目标规则只需要生成特定类型的目标的情况。在这种情况下,规则已经为您定义好了!当您定义一个新类型时,Boost.Build 会自动定义一个相应的规则。规则的名称是从类型的名称派生的,通过将所有字母转换为小写并将下划线替换为连字符获得。例如,如果您创建了一个包含以下内容的模块 obfuscate.jam
import type ; type.register OBFUSCATED_CPP : ocpp ; import generators ; generators.register-standard obfuscate.file : CPP : OBFUSCATED_CPP ;
并导入该模块,您将能够在 Jamfiles 中使用规则“obfuscated-cpp”,它将把源代码转换为 OBFUSCATED_CPP 类型。
第二种方法是编写一个包装规则,调用任何现有的规则。例如,假设每个目录只有一个库,并且希望目录中的所有 cpp 文件都编译到该库中。您可以使用以下方法实现此效果:
lib codegen : [ glob *.cpp ] ;
如果您想使其更简单,您可以将以下定义添加到 Jamroot.jam
文件中
rule glib ( name : extra-sources * : requirements * ) { lib $(name) : [ glob *.cpp ] $(extra-sources) : $(requirements) ; }
允许您将 Jamfile 简化为:
glib codegen ;
请注意,因为您可以将自定义生成器与目标类型关联,所以构建的逻辑可能相当复杂。例如,boostbook
模块声明了一个目标类型 BOOSTBOOK_MAIN
和一个该类型的自定义生成器。如果您的主目标规则是非平凡的,您可以将其作为示例。