С этот пример :
g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program's benchmarks, or something to stress its most common path
g++ -O3 -fprofile-use [more params here, like -march=native...] -o executable_name
По сути, вы изначально компилируете и связываете с этим дополнительным флагом для компиляции и компоновки: -fprofile-generate
(с здесь ).
Затем, когда вы запускаете его, по умолчанию он создает файлы .gcda «рядом» с вашими .o файлами, кажется (жестко запрограммирован на полный путь, по которому они были построены).
При желании вы можете изменить место, где он создает эти файлы .gcda, с параметром -fprofile-dir = XXX .
Затем вы перекомпилируете и перекомпоновываете, используя параметр -fprofile-use
, и он компилирует его, следуя указаниям профиля.