Когда я создаю двоичные файлы для двоичного распространения или для тестирования производительности, я бы хотел, чтобы они были максимально или по крайней мере сильно оптимизировано. Конечно, некоторые оптимизации являются компромиссами, которые не всегда улучшают производительность, но я имею в виду оптимизации, которые обычно считаются «достаточно хорошими», чтобы их можно было применять повсеместно, т. е. применять к программе без ее профилирования; например, для GCC это будут флаги типа -O3 -march=native и, возможно, другие.
Теперь, просматривая документацию CMake, я не совсем нахожу гарантия того, что что-то подобное будет сделано для меня, если я использую тип сборки Release.
Конечно, я мог бы установить CMAKE__FLAGS_RELEASE переменная, которая в мой конкретный случай — CMAKE_CPP_FLAGS_RELEASE. Но тогда мне нужно будет:
- Определить, на какую платформу я ориентируюсь
- Определить характеристики процессора, который я использую моя цель
- Определить компилятор, который я использую, и какую версию указанного компилятора
Но - ни одна из этих настроек не характерна для моего проекта и программы, которую я компилирую. Интересно, почему CMake не делает этого за нас...
В любом случае, если мы не можем оставить все на попечение CMake - что такое общий (почти), идиоматический, надеюсь, широко используемый подход к включению «полной» оптимизации в CMake для многих компиляторов и на нескольких платформах?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ized-build