Вопрос или проблема
Я хочу, чтобы g++ по умолчанию использовал -std=c++14, не вводя его каждый раз. Как мне это сделать?
Добавьте:
alias g++='g++ -std=c++14'
в ваш профиль (или, возможно, .bashrc
). В следующий раз, когда вы войдете в систему (или начнете новый терминал с .bashrc
), команда g++
будет выполнять g++ -std=c++14
.
Для одного экземпляра терминала просто введите это в командной строке. Это будет работать в большинстве случаев, но если у вас возникнут проблемы, попробуйте сделать следующее.
Если у вас есть скрипты или программы, которые ссылаются на буквальный путь к бинарнику g++
(например, /usr/bin/g++
), вы можете переместить бинарник g++
в новый файл, например, g++-bin
, и написать скрипт, подобный этому, названный g++
в той же директории:
#! /bin/sh
/usr/bin/g++-bin -std=c++14 "$@"
Это даст такой же конечный результат, как и алиас ($@
передает все аргументы родительского скрипта бинарнику g++
), но скрипт будет использоваться при обращении по полному пути к компилятору.
Обязательно сделайте скрипт исполняемым (chmod 755
или аналогично), если вы используете этот метод.
Также имейте в виду, что ваш менеджер пакетов перезапишет ваш скрипт g++, когда g++ обновится, если вы поместите его в /usr/bin
(или аналог вашей дистрибуции), поэтому вам может понадобиться поместить скрипт в другую директорию с более высоким приоритетом в вашей переменной PATH
.
Лично я создал директорию в своей домашней папке (~/bin
) специально для таких случаев, и у меня есть строки в ~/.profile
и ~/.bashrc
, которые добавляют $HOME/bin
в начало переменной PATH
:
PATH="$HOME""/bin:""$PATH"
export PATH
Согласно странице поддержки стандартов C++ в GCC, C++14 является стандартным для GCC 6.1 и новее:
Этот режим является стандартным в GCC 6.1 и выше; его можно явно выбрать с помощью флага командной строки
-std=c++14
или-std=gnu++14
, чтобы также включить расширения GNU.
В текущих дистрибутивных версиях вам не нужно ничего делать. (GCC 6.1 был выпущен в конце апреля 2016 года.)
Узнайте, где gcc ожидает, что каталог спецификаций по умолчанию будет, с помощью
$ gcc -print-libgcc-file-name
/usr/lib/gcc/x86_64-redhat-linux/14/libgcc.a
В качестве root проверьте, существует ли существующий файл спецификации и сделайте его резервную копию:
mv /usr/lib/gcc/x86_64-redhat-linux/14/specs specs.bak
В качестве root:
gcc -dumpspecs > /usr/lib/gcc/x86_64-redhat-linux/14/specs
В качестве root отредактируйте выведенный файл спецификации и найдите:
*cpp:
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
и измените его на
*cpp:
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} %{!std*: -std=c++14}
Затем, как обычный пользователь, вы можете проверить, что версия по умолчанию изменилась
$ g++ -dM -E -x c++ /dev/null | grep __cplusplus
#define __cplusplus 201402L
Что показывает, что c++14 теперь является стандартом.
.
Ответ или решение
Чтобы настроить компилятор g++ для использования стандарта C++14 по умолчанию, не вводя флаг -std=c++14
каждый раз, существует несколько подходов.
1. Использование alias в оболочке
Первый и наиболее простой метод — это создание псевдонима (alias) в вашем профиле оболочки. Для этого выполните следующие шаги:
-
Открытие файла конфигурации оболочки:
Обычно настройки для Bash хранятся в файле~/.bashrc
, поэтому откройте его в текстовом редакторе:nano ~/.bashrc
-
Добавление alias:
В конце файла добавьте следующую строку:alias g++='g++ -std=c++14'
-
Сохранение изменений и перезагрузка конфигурации:
Сохраните изменения и выполните команду для обновления конфигурации:source ~/.bashrc
Теперь каждый раз, когда вы будете вводить g++
в терминале, по умолчанию будет использоваться стандарт C++14.
2. Создание скрипта для g++
Если у вас есть скрипты или программы, которые ссылаются на полный путь к бинарному файлу g++ (например, /usr/bin/g++
), то можно создать сценарий, который будет выполнять g++ с указанным стандартом по умолчанию:
-
Переименуйте g++:
Как root, переименуйте существующий бинарный файл g++:mv /usr/bin/g++ /usr/bin/g++-bin
-
Создание нового скрипта:
Создайте новый файл с именем g++ в том же каталоге:touch /usr/bin/g++ chmod 755 /usr/bin/g++
Откройте его в текстовом редакторе и добавьте следующий код:
#! /bin/sh /usr/bin/g++-bin -std=c++14 "$@"
Теперь этот скрипт будет вызываться, когда вы используете g++
, и он будет автоматически добавлять флаг -std=c++14
.
3. Изменение спецификаций GCC
Для более продвинутых пользователей, если вы хотите изменить значения по умолчанию в спецификациях GCC, выполните следующие шаги:
-
Вывод текущего местоположения файлов спецификаций:
Выполните команду:gcc -print-libgcc-file-name
Это покажет вам, где находятся файлы спецификаций GCC.
-
Создание резервной копии и редактирование спецификаций:
Выполните команды, необходимые для создания резервной копии и редактирования файла спецификаций:sudo mv /usr/lib/gcc/x86_64-redhat-linux/14/specs specs.bak sudo gcc -dumpspecs > /usr/lib/gcc/x86_64-redhat-linux/14/specs
Откройте новый файл спецификаций и найдите строку, начинающуюся с
*cpp:
. Правильно отредактируйте эту строку следующим образом:*cpp: %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} %{!std*: -std=c++14}
-
Проверка изменений:
После редактирования спецификаций, как обычный пользователь выполните:g++ -dM -E -x c++ /dev/null | grep __cplusplus
Вы должны увидеть, что стандарт C++14 теперь установлен как стандарт по умолчанию.
Заключение
Используя один из вышеописанных методов, вы сможете значительно упростить процесс компиляции программ на C++. Выбор конкретного подхода зависит от ваших предпочтений и сценария использования. Если вы ищете удобство и простоту, метод с использованием alias будет наиболее предпочтителен.