>>49786> какие флажки в gcc могут понадобиться ньюфагу
CFLAGS = \
-std=c89 -pedantic -Wall -Wextra -Wformat=2 \
-O3 -march=native -mtune=native -Wl,--build-id=none -s
-std=c89 -pedantic — строгая проверка соответствия кода стандарту ANSI C89. Он самый старый и самый переносимый между остальными компиляторами. Не обязательно.
-Wall -Wextra — куда ж без них. Для пущего эффекта можно добавить
-Werror, любой ворнинг будет останавливать компиляцию; на любителя.
-Wformat=2 — проверка форматирования в printf. Нельзя вызывать
printf(str) — если в
str вдруг окажется строка с лишними спецификаторами (пользователь ввёл, например), будет undefined behaviour. Правильно:
printf("%s", str) или
fputs(str, stdout).
Это что касается статических проверок.
-O3 -march=native -mtune=native — оптимизации, о которых я пока мало знаю. Максимальная (
-O3), для вот этого процессора (
-mtune=native), и вот этой архитектуры (
-march=native), на которых компилируется код.
-Wl,--build-id=none -s — флаги для линкера. Немножко уменьшает вес бинария и количество лишних секций, чтобы не мозолили глаза в дампах.
Остаются ещё две лишние, для их удаления придётся дополнительно вызвать
strip -R .note -R .comment $(BIN)
Рекомендую освоить make всем, кто ещё не. Очень экономит время.
Приложенный файл компилирует все исходники, каждый в свой бинарий. Можно вызывать
make <имя>, чтобы скомпилять только один. Дополнение имён по табу должно срабатывать.
Для мелких учебных программок, состоящих из одного файла — в самый раз.