Флаги оптимизации GCC

Я пытаюсь собрать кучу исполняемых файлов с разными оптимизациями. Мой единственный вопрос: должны ли команды gcc с -c также использовать флаги -O? Я спрашиваю об этом, потому что я понимаю, когда я помещаю флаг оптимизации только в команду gcc, чтобы создать исполняемый файл, размеры не различаются между файлами вообще, что кажется неправильным.

Например, у меня есть что-то вроде этого:

g++ -c cat.cpp 
g++ -c dog.cpp        
g++ cat.o dog.o -o catdog

Буду ли я использовать флаги на все, как это:

g++ -c -O2 sobol.cpp
g++ -c -O2 sobol_prb.cpp        
g++ sobol.o sobol_prb.o -O2 -o catdog02

Если бы кто-нибудь мог мне помочь, я был бы очень признателен.

Спасибо.

3 ответа

Вы можете сделать это так:

  g++ sobol.cpp sobol_prb.cpp -O2 -o catdog02

Если вам нужно скомпилировать более 2 или 3 файлов, вы должны рассмотреть Makefile.

Если вы работаете над нетривиальным проектом, вы должны начать думать о системе сборки, как предложила @polkadotcadaver, хотя я бы остановился на automake или cmake, поскольку они более популярны, чем другие системы сборки.

Да, используйте флаги оптимизации при каждой компиляции объекта.

(В общем, используйте систему сборки, такую ​​как SCons, которая делает подобные вещи проще, даже если это "маленький" проект.)

Когда вы выполняете gcc для файлов объектов (.o), это в основном просто вызывает компоновщик с выбранными соответствующими библиотеками и так далее. В обычном режиме этот шаг не требует компиляции, и флаги оптимизации не будут иметь никакого эффекта.

Оптимизация происходит на этапе компиляции (тот, что содержит входы.cpp), и здесь уместны переключатели оптимизации.

С оптимизацией времени соединения (-flto) история немного отличается, когда вам нужно использовать переключатели оптимизации при компиляции и компоновке.

Другие вопросы по тегам