Bazel 构建(或 GCC)中的“-c opt”和“--copt=-O3”有什么区别
What is the difference between "-c opt" and "--copt=-O3" in Bazel build (or GCC)
我正在学习 GCC 和 Bazel。我想启用 Bazel 的所有优化来构建一个需要最佳性能的项目。
然后我找到了-c opt
意思就是把编译模式设置为optimized without debug information
而--copt=-O3
表示将优化级别设置为第三级。有-O2
、-Os
等
我对这两个选项感到困惑。
-c opt
和--copt=-O3
有什么区别?
- 他们会不会互相触发。所以我只需要写其中一个
bazel build
?
--copt
用于将参数传递给编译器。
-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=opt
与bazel build --copt=-O3
效果相同
我正在学习 GCC 和 Bazel。我想启用 Bazel 的所有优化来构建一个需要最佳性能的项目。
然后我找到了-c opt
意思就是把编译模式设置为optimized without debug information
而--copt=-O3
表示将优化级别设置为第三级。有-O2
、-Os
等
我对这两个选项感到困惑。
-c opt
和--copt=-O3
有什么区别?- 他们会不会互相触发。所以我只需要写其中一个
bazel build
?
--copt
用于将参数传递给编译器。
-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=opt
与bazel build --copt=-O3