同时指定 -O2 和 -O3
Specifying both -O2 and -O3 at same time
有些程序已经使用了 -O2 标志,如果我使用 -O3 标志,程序将同时使用 -O2 和 -O3 进行编译,如任务管理器或 /proc/PID/cmdline
所示。
例如,我使用的 Linux 内核是用 Clang 和完整的 LTO 构建的。即使我在 dkms 配置中有这些行:
# /etc/dkms/framework.conf
export LLVM=1
export CC=clang
export CFLAGS="-O3 -march=native"
现在 DKMS 模块使用 -O2
和 -O3
标志进行编译。在这种情况下,实际使用了哪个标志?
对于 gcc,请参阅 https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Optimize-Options.html#Optimize-Options
If you use multiple -O
options, with or without level numbers, the last such option is the one that is effective.
clang 没有广泛记录其选项语法,但它通常会尝试与 gcc 兼容,因此在这方面应该是相同的。
有些程序已经使用了 -O2 标志,如果我使用 -O3 标志,程序将同时使用 -O2 和 -O3 进行编译,如任务管理器或 /proc/PID/cmdline
所示。
例如,我使用的 Linux 内核是用 Clang 和完整的 LTO 构建的。即使我在 dkms 配置中有这些行:
# /etc/dkms/framework.conf
export LLVM=1
export CC=clang
export CFLAGS="-O3 -march=native"
现在 DKMS 模块使用 -O2
和 -O3
标志进行编译。在这种情况下,实际使用了哪个标志?
对于 gcc,请参阅 https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Optimize-Options.html#Optimize-Options
If you use multiple
-O
options, with or without level numbers, the last such option is the one that is effective.
clang 没有广泛记录其选项语法,但它通常会尝试与 gcc 兼容,因此在这方面应该是相同的。