Bazel可以使用build config来指定编译参数。其中的configurations选项可以用来指定所有可能的定义标志,而Bazel只会构建与指定参数匹配的构建。示例代码如下:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "xilinx", url = "https://github.com/Xilinx/XilinxRepos/releases/download/1.0.1/XilinxRepos-1.0.1.tar.gz", )
cc_library( name = "lib", srcs = ["lib.cpp"], hdrs = ["lib.h"], visibility = ["//visibility:public"], defines = select({ "//conditions:default": ["DEFINE_1"], "//conditions:define_1": ["DEFINE_1", "DEFINE_2"], "//conditions:define_2": ["DEFINE_2"], }), )
config_setting( name = "define_1", values = { "defines": ["DEFINE_1"], }, )
config_setting( name = "define_2", values = { "defines": ["DEFINE_2"], }, )
build_configurations()
cc_binary( name = "main", srcs = ["main.cpp"], deps = [":lib"], )
构建时,可以使用--config命令行选项指定使用的配置。例如:
bazel build --config=define_1 //path/to:main
这将使用DEFINE_1的标记构建main二进制文件。