BAZEL C++规则(CXLIIBARARY):为什么它的依赖性的目标访问头不通过HDRS暴露?

BAZEL C++规则(CXLIIBARARY):为什么它的依赖性的目标访问头不通过HDRS暴露?,bazel,bazel-rules,Bazel,Bazel Rules,在Bazel上可以找到一个例子,默认情况下,Bazel不执行任何标题隐私检查。但是,在clang和Bazel的最新版本下,可以使用分层检查功能启用所谓的分层检查验证。例如,通过OP的示例存储库和Bazel 4.0.0,我看到: $ CC=clang bazel build //sub --features layering_check INFO: Analyzed target //sub:sub (16 packages loaded, 56 targets configured). INFO

Bazel上可以找到一个例子,默认情况下,Bazel不执行任何标题隐私检查。但是,在clang和Bazel的最新版本下,可以使用分层检查功能启用所谓的分层检查验证。例如,通过OP的示例存储库和Bazel 4.0.0,我看到:

$ CC=clang bazel build //sub --features layering_check
INFO: Analyzed target //sub:sub (16 packages loaded, 56 targets configured).
INFO: Found 1 target...
ERROR: sub/BUILD:3:10: Compiling sub/greet.cpp failed: (Exit 1): clang failed: error executing command /usr/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 28 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox clang failed: error executing command /usr/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 28 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
sub/greet.cpp:1:10: error: use of private header from outside its module: 'f.h' [-Wprivate-header]
#include "f.h"
         ^

通过在生成文件中设置features=['layering\u check'],也可以在每个目标的基础上启用分层检查。

Bazel默认情况下不执行任何标题隐私检查。但是,在clang和Bazel的最新版本下,可以使用分层检查功能启用所谓的分层检查验证。例如,通过OP的示例存储库和Bazel 4.0.0,我看到:

$ CC=clang bazel build //sub --features layering_check
INFO: Analyzed target //sub:sub (16 packages loaded, 56 targets configured).
INFO: Found 1 target...
ERROR: sub/BUILD:3:10: Compiling sub/greet.cpp failed: (Exit 1): clang failed: error executing command /usr/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 28 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox clang failed: error executing command /usr/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -MD -MF ... (remaining 28 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
sub/greet.cpp:1:10: error: use of private header from outside its module: 'f.h' [-Wprivate-header]
#include "f.h"
         ^

通过在构建文件中设置features=['layering\u check'],也可以在每个目标的基础上启用分层检查。

感谢您的解释!不过还有一个问题:关于目标何时可以访问其DEP的srcs部分中的头,是否存在任何模式?还是总是这样?所以HDR和SRC在没有分层检查的情况下没有区别?SRC和HDR不会影响可见性检查,不。还有一些其他的区别,比如strip\u include\u前缀只适用于HDR。感谢您的解释!不过还有一个问题:关于目标何时可以访问其DEP的srcs部分中的头,是否存在任何模式?还是总是这样?所以HDR和SRC在没有分层检查的情况下没有区别?SRC和HDR不会影响可见性检查,不。还有一些其他的区别,比如strip\u include\u前缀只适用于HDR。