从源代码构建 TensorFlow 时,-c opt 和 --config=opt 有什么区别?

What's the difference between -c opt and --config=opt when building TensorFlow from source?

从源代码构建 TensorFlow 时,我们被要求设置 --config=opt(默认情况下将启用 gcc 标志 -march=native),但在网络上我看到很多人使用 -c opt 而不是,但根据 Bazel 的文档 -c 实际上是 shorthand for --compilation_mode 而不是 --config!

令人困惑的是,--compilation_mode 也将 'opt' 作为一个值,但我认为这只是巧合?有人可以澄清在 TensorFlow 编译期间执行 bazel build-c opt--config=opt 之间的区别吗?

-c opt 标志用于告诉 Bazel 在启用优化设置且没有调试信息的情况下进行构建。就像你提到的 --compilation_mode opt。这与用于编译任何代码的标志有关。

--config=opt 告诉 Bazel,在编译期间查看 .bazelrc 文件并读取与 opt 配置相匹配的任何设置。在你 运行 你的 configure 脚本与 tensorflow 之后,你应该有一个 .bazelrc 文件位于你的工作空间的根目录中,它定义了多个配置的设置。对于 opt 配置,它添加了额外的 -march-native 用于编译。

所以它们以相同的方式命名有点巧合。但是 --config 是一个灵活的工具,可以从 .bazelrc 文件中选择 Bazel 设置。 -c 实际上只是用于优化代码构建。

--config 设置在 .rc 文件中定义的一组标志中扩展的配置。例如。如果 rc 文件包含 build:opt -c opt,则在命令行上设置 --config opt 将扩展为 -c opt。 tensorflow rc 文件 set -c opt 但未定义任何 opt 配置。所以设置 --config opt 什么都不做。

附录:TensorFlow 的 ./configure 在 opt 配置的 .bazelrc 上添加了一些 C++ 选项(因此它会扩展到那些 C++ 选项)。