Флаги оптимизации 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) история немного отличается, когда вам нужно использовать переключатели оптимизации при компиляции и компоновке.