使用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标头。
答案 0 :(得分:2)
恐怕您在这里不走运。 IIRC可以归结为您的工具链配置(特别是CROSSTOOL
文件),在这种情况下,在cxx_builtin_include_directory
路径中找到的标头在这种情况下可以通过一次免费传递WRT检查来正确声明所有依赖项。
换句话说,如果要确保只使用编译器和相应的sysroot标头,而又不会被系统上的其他任何东西污染,则必须为此定义自己的工具链(而不是依赖关于在您的主机上找到的内容)。如果确实要确保构建在各个方面都是一致的,那么将工具链设置为外部依赖项通常可能不是一个坏主意(这比与其相关的开销(包括初始编写成本)要大得多)配置)。能够使用主机上已经存在的工具很方便,但是可能会引入差异(除非您可以可靠地控制每台计算机的设置)。