2016-07-07 3 views
2

Мне интересно, могут ли параметры компилятора gcc по умолчанию меняться, если это так, где я могу ожидать разные параметры компилятора по умолчанию. Могут ли параметры компилятора по умолчанию меняться от одной версии gcc к другому (например, gcc 4.6 -> gcc 4.8) или они всегда одинаковы? Возможны ли параметры компилятора по умолчанию от одной версии ОС до другой (например, Ubuntu 12.04 -> 14.04)?Являются ли параметры gcc-компилятора gcc конкретными или специфичными для ОС или для обоих?

Я ожидаю, что параметры компилятора по умолчанию отличаются от двух разных ОС, таких как Ubuntu и Debian, не так ли?

+0

Ubuntu основан на Debian. – Olaf

+0

@Olaf ... но Debian rocks;) – LPs

+0

это обязательно означает, что параметры компилятора по умолчанию одинаковы? – Maximilian

ответ

3

Да, вы можете ожидать, что флаги по умолчанию будут совсем другими. К счастью, вам не нужно знать, что такое флаги, и вам не нужно их устанавливать.

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 делает? На самом деле, нет.

0

Я бы рекомендовал вам воспользоваться такими инструментами, как automake, чтобы создать Make-файлы для вашего приложения. Этот инструмент может создавать файлы по-разному в зависимости от среды. Затем в этом Makefile, укажите параметры, которые важны для вас: не оставляйте их по умолчанию («на случай»).

+1

Как этот ответ может быть связан с вопросом .... O.o ??? – LPs

+0

Вопрос «как указано», поскольку я прочитал его, был не просто * «варианты по умолчанию меняются?» * Как предложено * «и где я могу ожидать разные параметры компилятора?», «Я интерпретировал направленность вопроса быть: «как я могу быть уверен, что произойдет во всех случаях?» Таким образом, я попытался ответить: * (a) * использовать Automake, а затем * (b) * указать все, что имеет значение, а не полагаться на значения по умолчанию. ** Теперь ** вы * знаете *, что произойдет, в каждом случае. Пользователи запускают процедуру 'configure && make', к которой они хорошо привыкли, и у вас есть полный контроль над тем, что происходит. –

+0

OP запрашивает опции _default gcc-компилятора _... как на самом деле можно автоматизировать их изменение ...? – LPs

Смежные вопросы