Флажки компиляции (или флаги компиляции) — это специальные параметры, передаваемые компилятору для управления процессом компиляции. Они позволяют настраивать оптимизацию, диагностику, стандарт языка и другие аспекты работы компилятора.
Оптимизация
-O0
— отключение оптимизации (удобно для отладки).
-O1
, -O2
, -O3
— уровни оптимизации (увеличивают производительность, но могут усложнить отладку).
-Os
— оптимизация по размеру кода.
Диагностика и отладка
-g
— включение отладочной информации (для gdb, lldb).
-Wall
— включение большинства предупреждений.
-Werror
— трактовка предупреждений как ошибок.
Стандарты языка
-std=c++11
, -std=c++17
— выбор версии стандарта C++.
-std=c99
, -std=c11
— выбор версии стандарта C.
Прочие важные флаги
-I<путь>
— добавление пути к заголовочным файлам.
-L<путь>
— добавление пути к библиотекам.
-l<библиотека>
— линковка с библиотекой.
-D<макрос>
— определение макроса (аналог #define).
g++ -std=c++17 -Wall -O2 -I./include -L./lib -lmylib main.cpp -o program
g++
) получает флаги и применяет их:
-std=c++17
),-Wall
),-O2
),./include
(-I./include
),mylib
из ./lib
(-L./lib -lmylib
).-O3
может ускорить код в разы.-Wall -Werror
ловит потенциальные баги.-std=
гарантирует переносимость кода.Резюмируем: флажки компиляции — это мощный инструмент для тонкой настройки процесса сборки. Их грамотное использование улучшает качество, производительность и надежность ПО.