Bazel允许我包括全局安装的库中的头文件

时间:2018-07-08 12:42:26

标签: c++ bazel

使用cc_library,我可以包含<boost/lexical_cast.hpp>,因为它在/usr/include中。如何使构建失败?包含任意系统头文件的能力使得难以验证构建是否可重现且自包含,以及使用的是特定版本的库(我宁愿在工作区中包含库,以保证其确切版本)。

$ cat BUILD
cc_library(
    name = "example",
    srcs = [":example.cpp"],
)
$ cat example.cpp
#include <boost/lexical_cast.hpp>

当然,我仍然希望能够包含标准的C ++和POSIX标头。

1 个答案:

答案 0 :(得分:2)

恐怕您在这里不走运。 IIRC可以归结为您的工具链配置(特别是CROSSTOOL文件),在这种情况下,在cxx_builtin_include_directory路径中找到的标头在这种情况下可以通过一次免费传递WRT检查来正确声明所有依赖项。

换句话说,如果要确保只使用编译器和相应的sysroot标头,而又不会被系统上的其他任何东西污染,则必须为此定义自己的工具链(而不是依赖关于在您的主机上找到的内容)。如果确实要确保构建在各个方面都是一致的,那么将工具链设置为外部依赖项通常可能不是一个坏主意(这比与其相关的开销(包括初始编写成本)要大得多)配置)。能够使用主机上已经存在的工具很方便,但是可能会引入差异(除非您可以可靠地控制每台计算机的设置)。