Да, вы можете ожидать, что флаги по умолчанию будут совсем другими. К счастью, вам не нужно знать, что такое флаги, и вам не нужно их устанавливать.
Ubuntu и Debian довольно похожи, так как Ubuntu так тесно базируется на Debian. Но вы увидите множество различных вариантов, поскольку фактические параметры, используемые GCC, являются довольно техническими. Вы можете увидеть их, выполнив следующие действия:
gcc -Q -v -x c -c /dev/null
Это спрашивает GCC для компиляции /dev/null
как программа C (-x c -c /dev/null
) и распечатать кучу информации для разработчиков (-Q -v
). Я провел это с помощью GCC 4.4, 4.6 и 4.8 и получил разные результаты. Вот различия между вариантами для 4.4 и 4.6 на моей машине:
< -falign-loops
< -fargument-alias
> -fdelete-null-pointer-checks
> -fprefetch-loop-arrays
> -fsched-critical-path-heuristic
> -fsched-dep-count-heuristic
> -fsched-group-heuristic
> -fsched-last-insn-heuristic
> -fsched-rank-heuristic
> -fsched-spec-insn-heuristic
> -fshow-column
> -fstrict-volatile-bitfields
> -ftree-forwprop
> -ftree-loop-if-convert
> -ftree-phiprop
> -ftree-pta
> -ftree-slp-vectorize
> -fvar-tracking-assignments
< -mfused-madd
Вот дифференциалы с версии 4.6 до 4.8 на моей машине:
> -faggressive-loop-optimizations
> -fgnu-runtime
> -fgnu-unique
< -finline-functions-called-once
> -finline-atomics
> -fira-hoist-pressure
> -fsync-libcalls
> -ftree-coalesce-vars
< -fvect-cost-model
> -mfxsr
> -mlong-double-80
На моей машине, GCC использует 80 различных по умолчанию при компиляции C! Параметры также будут меняться при компиляции C++ или компиляции на разных платформах.
Но это нормально. Вы можете в принципе игнорировать все эти параметры и просто сосредоточиться на самых важных, которые представляют собой различные предупреждающие флаги -W
, флаги оптимизации -O
(которые на самом деле являются просто ярлыками для тонны предварительно выбранных флагов -f
и нескольких -m
- на моем компьютере, -O2
включает 63 дополнительных флага!) И флаг данных отладки -g
.
И, конечно же, основные флаги, как -std=
, -c
, -o
, -l
, -I
и т.д.
Я имею в виду, что вам действительно нужно знать, что -fbranch-count-reg
делает? На самом деле, нет.
Ubuntu основан на Debian. – Olaf
@Olaf ... но Debian rocks;) – LPs
это обязательно означает, что параметры компилятора по умолчанию одинаковы? – Maximilian