Как построить в режиме выпуска с оптимизацией в GCC?

Каковы конкретные параметры, которые мне потребуется для создания "режима выпуска" с полной оптимизацией в GCC? Если есть несколько вариантов, перечислите их все. Спасибо.

Ответы

Ответ 1

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Нет единого размера для всех - вам нужно понять ваше приложение, ваши требования и флаги оптимизации, чтобы определить правильное подмножество для вашего двоичного файла.

Или ответ, который вы хотите:  -O3

Ответ 2

Вот часть из файла Makefile, который я использую регулярно (в этом примере он пытается создать программу с именем foo).

Если вы запустите его как $ make BUILD=debug или $ make debug то будут использоваться Debug CFLAGS. Они отключают оптимизацию (-O0) и включают в себя отладочные символы (-g).

Если вы опустите эти флаги (запустив $ make без каких-либо дополнительных параметров), вы создадите версию Release CFLAGS, в которой включена оптимизация (-O2), отлаживаемые символы (-s) и отключенные утверждения (-DNDEBUG).

Как и другие, вы можете поэкспериментировать с различными настройками -O*, зависящими от ваших конкретных потребностей.

ifeq ($(BUILD),debug)   
# "Debug" build - no optimization, and debugging symbols
CFLAGS += -O0 -g
else
# "Release" build - optimization, and no debug symbols
CFLAGS += -O2 -s -DNDEBUG
endif

all: foo

debug:
    make "BUILD=debug"

foo: foo.o
    # The rest of the makefile comes here...

Ответ 3

Обратите внимание, что gcc не имеет "режима выпуска" и "режим отладки", например, MSVC. Весь код - всего лишь код. Наличие различных опций оптимизации (-O2 и -Os - единственные, о которых вам обычно нужно заботиться, если вы не делаете очень тонкую настройку) изменяет сгенерированный код, но не позволяет предотвратить совместимость с другими ABI-совместимыми код. Как правило, вам нужна оптимизация по материалам, которые вы хотите отпустить.

Наличие опции "-g" приведет к размещению расширенной информации о символах и исходных кодах в сгенерированных файлах, что полезно для отладки, но увеличивает размер файла (и показывает исходный код), который то, что вам часто не нужно в "выпущенных" двоичных файлах.

Но они не эксклюзивные. Вы можете иметь двоичный файл, скомпилированный с информацией об оптимизации и отладке, или с ничем.

Ответ 4

-O2 включит все оптимизации, которые не требуют пробела \speed trade off и, как правило, чаще всего используются мной. -O3 делает некоторое пространство для компромиссов скорости (например, функция inline.) -O делает O2 plus делает другие вещи, чтобы уменьшить размер кода. Это может сделать вещи быстрее, чем O3, улучшив использование кеша. (проверьте, работает ли он для вас.) Обратите внимание, что имеется большое количество опций, к которым никто из переключателей O не прикасается. Причина, по которой они не учтены, заключается в том, что она часто зависит от того, какой код вы пишете или очень зависимы от архитектуры.