同时指定 -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 兼容,因此在这方面应该是相同的。