= Подбор ключей компиляции GCC :category: Программирование :tags: программирование, C, C++, отладка, оптимизация, Подбор ключей компиляции основан на измерениях характеристик во время выполнения программы. На первом этапе создаётся исполняемый файл `program`, в который включается информация для профилировки. Ключ `-fprofile-generate=data/pgo` указывает, что нужно собирать информацию и сохранять в каталог `data/pgo`. Компиляцию следует выполнять в последовательном режиме. [source,sh] ---- env CXXFLAGS='-fprofile-generate=data/pgo' cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" make -j1 ---- После компиляцию программу следует выполнить, придерживаясь типичного сценария использования. [source,sh] ---- ./program ---- Скомпилировать программу с использованием полученной статистики. Для многопоточной программы следует указать флаг `-fprofile-correction`, чтобы скорректировать данные, которые могут неустойчивыми из-за пропусков обновлений счётчиков. Компиляцию следует выполнять в последовательном режиме. [source,sh] ---- env CXXFLAGS='-fprofile-use=data/pgo -fprofile-correction' cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" make -j1 ----