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选项

参考资料:
  • Bazel用户手册:

  • 答案是使用
    -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/...