Я хочу скомпилировать C-код только с параметрами компилятора, которые я конкретно упоминаю. Поэтому мне нужно как-то отключить все параметры компилятора, которые устанавливаются автоматически. Как отключить параметры GCC по умолчанию, которые устанавливаются во время каждой компиляции и не отображаются. Я говорю о параметрах компилятора, которые видны с помощью следующей команды gcc -Q -v example.c
, ведущей к этому выходу:Есть ли способ подавить параметры компилятора GCC по умолчанию?
GNU C (Ubuntu 4.8.4-2ubuntu1~14.04.3) version 4.8.4 (x86_64-linux-gnu)
compiled by GNU C version 4.8.4, GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
options passed: -v -imultiarch x86_64-linux-gnu example.c -mtune=generic
-march=x86-64 -fstack-protector -Wformat -Wformat-security
options enabled: -faggressive-loop-optimizations
-fasynchronous-unwind-tables -fauto-inc-dec -fbranch-count-reg -fcommon
-fdelete-null-pointer-checks -fdwarf2-cfi-asm -fearly-inlining
-feliminate-unused-debug-types -ffunction-cse -fgcse-lm -fgnu-runtime
-fgnu-unique -fident -finline-atomics -fira-hoist-pressure
-fira-share-save-slots -fira-share-spill-slots -fivopts
-fkeep-static-consts -fleading-underscore -fmath-errno
-fmerge-debug-strings -fmove-loop-invariants -fpeephole
-fprefetch-loop-arrays -freg-struct-return -fsched-critical-path-heuristic
-fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock
-fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec
-fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fshow-column
-fsigned-zeros -fsplit-ivs-in-unroller -fstack-protector
-fstrict-volatile-bitfields -fsync-libcalls -ftrapping-math
-ftree-coalesce-vars -ftree-cselim -ftree-forwprop -ftree-loop-if-convert
-ftree-loop-im -ftree-loop-ivcanon -ftree-loop-optimize
-ftree-parallelize-loops= -ftree-phiprop -ftree-pta -ftree-reassoc
-ftree-scev-cprop -ftree-slp-vectorize -ftree-vect-loop-version
-funit-at-a-time -funwind-tables -fvar-tracking -fvar-tracking-assignments
-fzero-initialized-in-bss -m128bit-long-double -m64 -m80387
-maccumulate-outgoing-args -malign-stringops -mfancy-math-387
-mfp-ret-in-387 -mfxsr -mglibc -mieee-fp -mlong-double-80 -mmmx -mno-sse4
-mpush-args -mred-zone -msse -msse2 -mtls-direct-seg-refs
Compiler executable checksum: a0a649d344b1ed798e33d30772d46437
Здесь опции компилятора по умолчанию можно рассматривать как options enabled
. Как отключить эти параметры, не используя, например, -fno-...
для большинства из них. Есть ли простой способ правильно отключить параметры компилятора по умолчанию?
Что вы ожидаете получить от отключения всех параметров '-f ... '? Обратите внимание, что некоторые из этих параметров нельзя отключить, поскольку они выбирают между двумя различными вариантами выбора, например. '-mlong-double-80' выбирает между 128 бит и 80 бит' long double'. – fuz
Я хотел бы отключить все параметры компилятора по умолчанию, о которых я знаю. После этого я хочу установить только параметры компилятора, которые я активно устанавливаю. Это необходимо, чтобы действительно знать, какие параметры компилятора активированы для компиляции определенного кода. – Maximilian
@FUZxxl: при отключенных параметрах gcc обрабатывает диалект, подобный популярному в 1990-е годы, который включает в себя множество полезных функций и гарантий, которые были исключены из Стандарта, поскольку были или могут быть платформы, где их стоимость будет превышать их преимущества. Если, например, код должен масштабировать знаковое значение положительным целым числом, я думаю, что gcc теперь будет поддерживать 'x << = y;', а не требовать, например, 'x = (int32) ((uint32_t) x) << y);', но у программиста не будет возможности узнать, потребует ли следующий выпуск gcc дополнительный '-fno-silly-signed-shift', чтобы сделать это Работа. – supercat