C++ 如何查看Bazel中使用的所有COPT(C/C+;+;构建选项)?
我想查看我的C++ 如何查看Bazel中使用的所有COPT(C/C+;+;构建选项)?,c++,build,bazel,C++,Build,Bazel,我想查看我的bazel build//my/target/..build命令使用的所有copt。我怎样才能做到?我尝试添加-s--详细的解释--explain=out.txt: bazel build -s --verbose_explanations --explain=out.txt //my/target/... …但它只是将所有bazel构建选项输出到“out.txt”中,而不是传递给编译器的C选项 参考资料: Bazel用户手册: 答案是使用-s选项: bazel build -s
bazel build//my/target/..
build命令使用的所有copt。我怎样才能做到?我尝试添加-s--详细的解释--explain=out.txt
:
bazel build -s --verbose_explanations --explain=out.txt //my/target/...
…但它只是将所有bazel构建选项输出到“out.txt”中,而不是传递给编译器的C选项
参考资料:
答案是使用
-s
选项:
bazel build -s //my/target/...
您可能还想使用--color=no
禁用bazel命令日志文件的颜色输出,这样它就没有特殊的颜色转义字符了
bazel build -s --color=no //my/target/...
然而,我没有看到任何有用的输出,原因很简单,因为bazel已经构建了所有这些东西并缓存了它的输出一旦Bazel构建了某个东西,如果它被缓存并保持不变,它将不会再次构建它,因此运行Bazel build//my/target/..
,然后运行Bazel build-s//my/target/..
将不会显示任何新内容
我所知道的迫使Bazel重建的唯一修复方法(不删除整个构建缓存)是对要构建的文件进行真正的代码更改,然后再次构建。最简单的方法是更改感兴趣的文件中的单个字符,以使生成被破坏
//在感兴趣的文件中,更改以下内容:
int i;
//为此:
intt i;
//真的,任何破坏构建的更改都可以
然后构建:
bazel build -s --color=no //my/target/...
文件已更改,因此缓存无效,因此bazel将重新生成,现在-s
将生效,您将看到所有额外的、详细的bazel生成输出。请注意,-s
表示--子命令
。请参见此处:
现在,修复上面的文件,然后重新构建:
bazel build -s --color=no //my/target/...
<> p>构建将重新进行,因为生成文件刚刚更改,它将通过这个时间,您将看到每个BAZEL构建命令的详细子命令,每个命令显示用于构建命令的COPTS(C或C++构建选项)。
查看您的Bazel命令日志(command.log文件),发现:
或者在这里,相对于您的git repo根目录:
build/bin/../../../../../command.log
根据需要调整上述路径。请注意,build/bin
是指向~/.cache/bazel
目录中上面较长路径的符号链接
无论如何,所有输出都将在这个命令.log文件中找到。在编辑器中以换行方式查看此文件,使其更易于查看,并找到感兴趣的*.cpp源文件的编译命令。找到compile命令后,将这一行复制到一个新文件中,重新打开换行,并在文件中执行正则表达式搜索模式-W[^]*
()
这一行可能是数百行命令和选项,并启用换行,并且此正则表达式搜索模式将查找所有编译器警告,例如,这些警告与后跟-W
的空格匹配,后跟除空格之外的任意数量的字符。换句话说,它将找到所有编译器警告选项,如-Werror=switch
,-Wno error=switch
,-Wall
,-Weverything
,-Werror
,等等
摘要:
无论如何,如果启用了-s
或--subcommands
bazel build选项,则在刚刚更改了感兴趣的源文件的新版本上,上面的bazel命令.log文件包含了bazel使用的所有最终编译命令,显示传递给gcc
或clang
或您正在使用的任何编译器的所有最终选项,您可以查看此文件,以查看编译过程中,对于您刚刚更改并正在通过此build命令生成的任何给定感兴趣的文件,您的所有设置到底是什么:
bazel build --subcommands --color=no //my/target/...
bazel build --subcommands --color=no //my/target/...