1. 在一个target中包含多个文件
可以利用glob在单个target中包含多个文件,例如:
cc_library(
name = "build-all-the-files",
srcs = glob(["*.cc"])
hdrs = glob(["*.h"]),
)
在这个target中,Bazel会编译BUILD文件所在目录下的所有.cc和.h文件(不包括子目录)。
2.includes可以进行传递
如果一个文件包括头文件,那么这个文件的规则也受到头文件所包含的库的影响咯?其实,我们只需要指定直接的依赖项为依赖项即可。比如说,假如sandwich.h
包含bread.h
,bread.h
又包含floor.h
,那么sandwich.h
是不用显式包含flour.h
的,所以BUILD文件如下写:
cc_library(
name = "sandwich",
srcs = ["sandwich.cc"],
hdrs = ["sandwich.h"],
deps = [":bread"],
)
cc_library(
name = "bread",
srcs = ["bread.cc"],
hdrs = ["bread.h"],
deps = [":flour"],
)
cc_library(
name = "flour",
srcs = ["flour.cc"],
hdrs = ["flour.h"],
)
3. 添加include路径
有时不能(或不愿)让依赖文件的路径包含其相对于工作区根目