Bazel build(或GCC)中“-c opt”和“--copt = -O3”之间的区别是什么

时间:2018-05-18 14:50:21

标签: gcc compiler-optimization bazel

我正在学习GCC和Bazel。我想为bazel启用所有优化来构建一个需要最佳性能的项目。

然后我找到了“-c opt”,这意味着在没有调试信息的情况下将编译模式设置为优化。

并且“--copt = -O3”表示将优化级别设置为第三个。有-O2 -Os等。

我对这两个选项感到困惑。

1)“-c opt”和“--copt = -O3”之间有什么区别? 2)他们会互相触发吗?所以我只需要用bazel build编写其中一个?

1 个答案:

答案 0 :(得分:4)

--copt用于将args传递给编译器。

-c--compilation-mode的缩写形式。 其效果在user-manual

中描述
  • 设置编译器选项(例如-c opt隐含-O2 -DNDEBUG
  • 每种编译模式都有不同的输出目录,因此您无需完全重新编译即可在调试和优化版本之间切换。

通常,-c opt就足够了。如果您希望-c opt的行为但具有不同的优化级别,则可以将-c opt --copt=-O3中的两个选项组合在一起,编译器将同时获得-O2-O3两个选项,但是最后一个会赢。

请注意,还有第三种类似的选择:

--config=configname用于选择配置。您可以使用.bazelrc来定义默认选项。其中一些并不总是活动的,但有些只有在您通过--config=configname命令行选项激活它们时才有效。现在opt是一个受欢迎的配置文件,因此如果您有.bazelrc包含

build:opt --copt=-O3

然后bazel build --config=optbazel build --copt=-O3

具有相同的效果