-
Notifications
You must be signed in to change notification settings - Fork 59
broc tag
#目录
前言 全局标签
编译器相关
COMPILER_PATH
编译参数相关
INCLUDE CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
宏/工具标签
宏变量
$WORKSPACE $OUT_ROOT $OUT
工具标签
GLOB PUBLISH
SVN标签
SVN_PATH SVN_URL SVN_REVISION SVN_LAST_COMMIT_ID
GIT标签
GIT_PATH GIT_URL GIT_COMMIT_ID GIT_BRANCH GIT_TAG
编译目标
APPLICATION UT_APPLICATION STATIC_LIBRARY PROTO_LIBRARY
局部标签
Include LdFlags CppFlags CFlags CxxFlags Libs Sources ProtoFlags
依赖标签
CONFIGS
#前言 本文描述了broc标签的语法,通过举例展示了各标签的具体用法。 按标签的作用域范围可以分为两大类:全局标签和局部标签:
全局标签 作用于整个BROC文件,标签名全部大写表示 局部标签 作用于所在标签指定的方位,标签名首字母大写表示 局部标签不为空时,会覆盖全局标签
#全局标签 ##编译器相关 COMPILER_PATH(path)
**作用:**设置全局的编译器搜索路径,主模块中设置除了会影响主模块,还会影响很依赖模块 **参数:**字符串类型,表示编译器所在目录的绝对路径 **举例:**COMPILER_PATH("/usr/bin"),broc使用编译命令为/usr/bin/gcc或/usr/bin/g++ **说明:**本标签只指定编译器所在的目录,不需要指定编译器
##编译参数相关 INCLUDE("path1 path2 ...")
**作用:**设置全局头文件检索目录,影响本模块中所有Source对象。 **参数:**字符串类型,多个目录之间空格分割,路径之前不添加参数I,如需要添加其他模块的路径,paths取值应该是以$WORKSPACE或者$OUT_ROOT开头的绝对路径; **举例:**INCLUDE("./include ./ ") INCLUDE("$WORKSPACE/app/ecom/foo/include") INCLUDE("$OUT_ROOT/app/ecom/foo/include") **说明:**默认的头文件搜索路径包含: $WORKSPACE, $OUT_ROOT,推荐使用#include "a/b/c/file.h"的方式引入头文件, a/b/c为模块的检出路径. 多个INCLUDE标签指定的头文件搜索路径会累加到一起
CPPFLAGS(debug_flags, release_flags)
**作用:**设置全局预处理参数,影响本模块中所有Source对象 **参数:**relase_flags和debug_flags为字符串类型,release_flags 表示release模式下的预处理参数,debug_flags表示debug模式下的预处理参数。如果需要指定多个预处理参数,参数用空格分割。broc默认的编译模式是debug, 则默认的预处理参数为debug_flags。 **举例:**CPPFLAGS('-DDEBUG -DBROC -ggdb','-DRELEASE')
CFLAGS(debug_flags, release_flags)
**作用:**设置全局C文件编译参数,影响本模块中所有Source对象,当Sources对象使用CFlags标签指定了局部的编译参数,会覆盖CFLAGS指定的全局参数 **参数:**relase_flags和debug_flags为字符串类型,release_flags 表示release模式下的编译参数,debug_flags表示debug模式下的编译参数。如果指定多个编译参数,用空格分割。broc默认的编译模式是debug, 则默认的预处理参数为debug_flags。 **举例:**CFLAGS('-g3 -Werror -O0', '-g -Wall -O2')
CXXFLAGS(debug_flags, release_flags)
**作用:**设置全局CPP文件编译参数,影响本模块中所有Source对象,当Sources对象使用CxxFlags标签指定了局部的编译参数,会覆盖CXXFLAGS指定的全局参数 **参数:**relase_flags和debug_flags为字符串类型,release_flags 表示release模式下的编译参数,debug_flags表示debug模式下的编译参数。如果指定多个编译参数,用空格分割。broc默认的编译模式是debug, 则默认的预处理参数为debug_flags。 **举例:**CXXFLAGS('-g3 -Werror -O0', '-g -Wall -O2')
LDFLAGS(debug_flags, release_flags)
**作用:**设置全局链接参数,影响本模块中所有Source对象,当Sources对象使用LDFlags标签指定了局部的编译参数,会覆盖LDFLAGS指定的全局参数 **参数:**relase_flags和debug_flags为字符串类型, release_flags 表示release模式要添加的链接参数, debug_flags表示debug模式要添加的链接参数。如果指定多个链接参数,用空格分割。未指定编译模式时,默认使用debug_flags。 **举例:**LDFLAGS('-lpthread -lcrypto', '-lpthread -lcrypto')
##宏/工具标签
$WORKSPACE
指代工作空间
$OUT_ROOT
指代所有编译产出根目录,$OUT_ROOT = $WORKSPACE + "/bc_out"
$OUT
指代本模块的编译产出目录,$OUT = $OUT_ROOT + "/" + 模块检出路径 + "/output"
###工具标签 GLOB(srcs)
**作用:**收集指定的文件,返回收集后的文件名,只可以收集本模块文件,不允许跳出本模块所在目录。 **参数:**字符串格式,支持正则表达式 **示例:**user_sources=GLOB("./*.cpp")
PUBLISH(src, dst)
**作用:**发布模块相关文件到模块的产出目录 **参数:**src:字符串类型,表示待发布的文件或者目录,不支持正则表达式,如需使用正则可以使用GLOB。dst:字符串类型,表示文件目的地 **举例:**PUBLISH('myconf/a.conf','$OUT/conf')、PUBLISH(GLOB(*.conf), '$OUT/conf') **备注:**dst必须以$OUT开头, src必须在模块的目录下,不能指定模块之外的文件
SVN_PATH()
**作用:**返回当前模块的本地路径
SVN_URL()
**作用:**返回当前模块的URL地址
SVN_REVESION()
**作用:**返回当前模块的revision
SVN_LAST_CHANGED_REV()
**作用:**返回当前模块最后一次修改的版本
GIT_PATH()
**作用:**返回当前模块的本地路径
GIT_URL()
**作用:**返回当前模块的URL地址
GIT_COMMIT_ID()
**作用:**返回当前模块最新的commit id
GIT_BRANCH()
**作用:**返回当前模块的branch信息
GIT_TAG()
**作用:**返回当前模块的tag信息
##编译目标相关 APPLICATION(name, Sources(...), LdFlags(...), Libs(...))
作用: 编译可执行文件 参数: name 可执行文件的名称,可包含大写字母,小写字母与下划线Sources 依赖的文件集合LDFlags 连接参数Libs 依赖的库 说明: name, Sources必填,LDFlags, Libs可选,当可选的同一种参数多次出现时进行累加
UT_APPLICATION(name, Sources(...), LdFlags(...), Libs(...), UTArgs(...))
**作用:**编译单元测试可执行文佳 **参数:**name 可执行文件的名称,可包含大写字母,小写字母与下划线Sources 依赖的文件集合LDFlags 连接参数Libs 依赖的库文件,UTArgs 执行文件的运行参数 **说明:**name, Sources必填,LDFlags, Libs, UTArgs参数可选,当可选的同一种参数多次出现时进行累加
STATIC_LIBRARY(name, Sources(...), Libs(...))
作用: 编译生成静态库文件 参数: name 库文件名称,可包含大写字母,小写字母与下划线Sources 依赖的文件集合, Libs依赖的库文件 说明: 若有依赖模块,则必须使用Libs添加,否则会导致依赖本库文件的模块无法获取二级依赖的库文件。name, Sources必填,只能出现一次;Libs可选,Libs出现多次时进行累加
PROTO_LIBRARY(name, GLOB(...), Proto_Flags(...), Include(...), CppFlags(...), CxxFlags(...), Libs(...))
作用: 编译生成proto静态库文件 参数: name 库文件名称,可包含大写字母,小写字母与下划线;GLOB 指定proto文件集合Proto_Flags指定proto文件处理参数;Include 指定pb2.cc文件的头文件的搜索路,CppFlags 指定pb2.cc文件的预处理参数, 两个参数分别代表debug模式参数和release参数,覆盖全局设置,以空格分隔的多个预处理参数,只能写预处理相关参数 -Dxx;CxxFlags 指定pb2.cc 文件的编译参数, 两个参数分别代表debug模式参数和release参数,覆盖全局参数, 以空格分隔的多个cpp文件编译参数,只能写编译相关参数,不能写-I,-D等选项;LIbs 指定要proto静态库要连接的库文件 **说明:**name, GLOB参数必填,其他可选,可选参数出现多次时进行累加
#局部标签 Include(incpath)
**作用:**指定局部的头文件搜索路径 **参数:**字符串类型,多个目录之间空格分割,路径之前不添加参数I,如需要添加其他模块的路径,paths取值应该是以$WORKSPACE或者$OUT_ROOT开头的绝对路径; **举例:**Include("./include ./ ") Include("$WORKSPACE/app/ecom/foo/include") Include("$OUT_ROOT/app/ecom/foo/include") **说明:**默认的头文件搜索路径包含: $WORKSPACE, $OUT_ROOT,推荐使用#include "a/b/c/file.h"的方式引入头文件, a/b/c为模块的检出路径.
LdFlags(debug_flags, release_flags)
**作用:**生成链接参数,取代全局的链接参数 参数: relase_flags和debug_flags为字符串类型,release_flags 表示release模式要添加的链接参数,debug_flags表示debug模式要添加的链接参数。如果指定多个链接参数,用空格分割。未指定编译模式时,默认使用debug_flags。 举例: LdFlags('-lpthread -lcrypto', '-lpthread -lcrypto')
CppFlags(debug_flags, release_flags)
作用: 生成局部预处理参数,覆盖全局参数 **参数:**relase_flags和debug_flags为字符串类型,release_flags 表示release模式要添加的预处理参数,debug_flags表示debug模式要添加的预处理参数。如果指定多个预处理参数,用空格分割。未指定编译模式时,默认使用debug_flags。 举例:CppFlags('-DTEST -ggdb','-DRELEASE')
CFlags(debug_flags, release_flags)
**作用:**生成局部c文件的编译参数,覆盖全局参数 参数: relase_flags和debug_flags为字符串类型,release_flags 表示release模式要添加的编译参数,debug_flags表示debug模式要添加的编译参数。如果指定多个编译参数,用空格分割。未指定编译模式时,默认使用debug_flags。 **举例:**CFlag('-g3 -Werror -O0', '-g -Wall -O2')
CxxFlags(debug_flags, release_flags)
作用: 生成局部cpp文件的编译参数,覆盖全局参数 参数: relase_flags和debug_flags为字符串类型,release_flags 表示release模式要添加的编译参数,debug_flags表示debug模式要添加的编译参数。如果指定多个编译参数,用空格分割。未指定编译模式时,默认使用debug_flags。 举例: CxxFlags('-g3 -Werror -O0', '-g -Wall -O2')
Libs(lib1, lib2, ...)
作用: 指定依赖的库文件 参数: 每个参数代表一个库文件, 参数可以是"[$OUT_ROOT|$OUT]+ 库文件全路径"的形式 举例: Libs('$OUT/lib/libxbuiltin.a', '$OUT_ROOT/et/tools/bar/output/lib/libxbuiltin-ut-proto-lib.a') 说明: 本模块只需指定一级依赖中的库文件。各依赖模块的BROC文件中必须指定其所依赖的库文件。
Sources(src, Include(...), CppFlags(...), CFlags(...), CxxFlags(...))
作用: 收集待编译的文件以及相关的编译参数 **参数:**srcs 指定源文件集合,支持正则表达式,多个参数之间用空格分割, 例如:"src/.cpp src/feature1/.cpp", "src/util.cpp src/feature1/fun.cpp"。仅支持.c .cpp类型的文件,指定源文件不允许跳出本模块所在目录;Include 添加头文件的搜索路径;CppFlags 指定预处理参数, 两个参数分别代表debug模式参数和release参数, 覆盖全局设置,以空格分隔的多个预处理参数,只能写预处理相关参数 -Dxx;CFlags 指定c文件的编译参数, 两个参数分别代表debug模式参数和release参数,覆盖全局设置, 以空格分隔的多个c文件编译参数, 只填写编译相关参数即可,不需要增加'-I','-D'等选项;CxxFlags 指定cpp文件的编译参数, 两个参数分别代表debug模式参数和release参数,覆盖全局参数, 以空格分隔的多个cpp文件编译参数,只能写编译相关参数即可,不需要增加'-I','-D'等选项
ProtoFlags(flag1, flag2, ...)
作用: 指定protoc命令的运行参数 **参数:**多个参数,每个参数为一个字符串 **举例:**ProtoFlags('--proto_path=$WORKSPACE/protobuf/include', '--proto_path=$OUT_ROOT/protobuf/include')
#依赖标签 CONFIGS(module)
指定依赖模块 **作用:**指定一个依赖模块 **参数:**module为字符串类型 svn examples
CONFIGS("public/ub@trunk") # 依赖ub trunk 最新代码 CONFIGS("public/ub@trunk@12345") # 依赖ub trunk,revision 为12345的代码 CONFIGS("public/ub@ub_1-0-0-0_BRANCH") # 依赖ub分支ub_1-0-0-0_BRANCH的最新代码 CONFIGS("public/ub@ub_1-0-0-0_BRANCH@12345”) # 依赖ub分支ub_1-0-0-0_BRANCH revision为12345的代码 CONFIGS("public/ub@ub_1-0-0-0_PD_BL”) # 依赖ub的tag ub_1-0-0-0_PD_BL
git examples
CONFIGS("ub@master@branch") # 依赖master分支最新代码, CONFIGS("ub@dev@branch") # 依赖dev分支的最新代码, CONFIGS("ub@v1.0.0@tag") # 依赖tag v1.0.0,
备注: @branch 表示master或dev为分支名 @tag 表示v1.0.0为tag名