То, что вы хотите сделать, вообще невозможно.
Однако недавний GCC (например, GCC 8 в конце 2018 года) принимает много опций и некоторые из них могут быть переданы атрибутами функции или с помощью прагм для конкретных функций (Однако они не принимают -g
, но принимают -O2
).
Кроме того, вы можете использовать -g
в каждой компиляции (с GCC он может быть смешан с флагами оптимизации, такими как -O2
; поэтому производительность во время выполнения не пострадает. Конечно, -g
увеличит время компиляции и размер произведенного объектного файла). Обратите внимание, что (в Linux) отладочная информация DWARF видна в сгенерированном файле ассемблера (например, попробуйте скомпилировать ваш foo.c
с помощью gcc -Wall -g -O -S -fverbose-asm foo.c
, посмотрите на сгенерированный foo.s
и повторите, удалив -g
)
Я бы хотел просто запустить gcc myfile.c
Это очень плохая привычка 1034 *. Вы должны запустить gcc -Wall -Wextra -g myfile.c -o myprog
, чтобы получить все предупреждения (вы действительно хотите их получить) и отладочную информацию в вашем исполняемом файле myprog
. Прочитайте Как отлаживать небольшие программы , прежде чем продолжить кодирование вашей программы.
Меня не интересует использование make с переменной окружения CFLAGS
Но вы действительно должны . Использование make
или другого средства автоматизации сборки (например, ninja , omake , грабли , и т. Д. И т. Д.) * - это , на практике обычный и обычный способ использования GCC .
В качестве альтернативы, в Linux напишите крошечный сценарий оболочки , выполняющий компиляцию (это особенно целесообразно, если ваша программа представляет собой один исходный файл; для чего-то большего, вы действительно должны использовать некоторый инструмент автоматизации сборки). Наконец, если вы используете emacs
в качестве редактора исходного кода , вы можете добавить несколько строк комментариев (как в конце моего manydl.c
пример) указание переменных файла Emacs для настройки компиляции (сделано из emacs
)
Если эти соглашения вас удивят, прочитайте о философии Unix , а затем изучите - для вдохновения - исходный код некоторых существующих свободных программ (например, github, gitlab или в вашем любимом дистрибутиве Linux).
Наконец, GCC сам по себе является проектом свободного программного обеспечения (но огромным из более чем пяти миллионов строк в основном исходного кода на C ++). Таким образом, вы можете улучшить его так, как пожелаете (если вы следуете его лицензии GPLv3 + ), предварительно изучив его исходный код. Это займет у вас несколько месяцев (или лет) работы (потому что GCC очень сложен для понимания).
См. Также этот ответ на связанный вопрос.
Вы также можете (но я рекомендую этого не делать, потому что это очень запутанно) поиграть с вашей переменной PATH
и иметь там какую-то директорию -e.g. $HOME/bin/
, перед /usr/bin/
, который содержит /usr/bin/gcc
, с вашим сценарием оболочки с именем gcc
; но не делайте этого, вы будете сбиты с толку. Вместо этого напишите некоторый «универсальный» mygcc
сценарий оболочки , который будет запускать /usr/bin/gcc
и добавить к нему соответствующие флаги (я полагаю, это не стоит усилий).