g++ – как использовать -std=c++14 по умолчанию?

Вопрос или проблема

Я хочу, чтобы 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) в вашем профиле оболочки. Для этого выполните следующие шаги:

  1. Открытие файла конфигурации оболочки:
    Обычно настройки для Bash хранятся в файле ~/.bashrc, поэтому откройте его в текстовом редакторе:

    nano ~/.bashrc
  2. Добавление alias:
    В конце файла добавьте следующую строку:

    alias g++='g++ -std=c++14'
  3. Сохранение изменений и перезагрузка конфигурации:
    Сохраните изменения и выполните команду для обновления конфигурации:

    source ~/.bashrc

Теперь каждый раз, когда вы будете вводить g++ в терминале, по умолчанию будет использоваться стандарт C++14.

2. Создание скрипта для g++

Если у вас есть скрипты или программы, которые ссылаются на полный путь к бинарному файлу g++ (например, /usr/bin/g++), то можно создать сценарий, который будет выполнять g++ с указанным стандартом по умолчанию:

  1. Переименуйте g++:
    Как root, переименуйте существующий бинарный файл g++:

    mv /usr/bin/g++ /usr/bin/g++-bin
  2. Создание нового скрипта:
    Создайте новый файл с именем 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, выполните следующие шаги:

  1. Вывод текущего местоположения файлов спецификаций:
    Выполните команду:

    gcc -print-libgcc-file-name

    Это покажет вам, где находятся файлы спецификаций GCC.

  2. Создание резервной копии и редактирование спецификаций:
    Выполните команды, необходимые для создания резервной копии и редактирования файла спецификаций:

    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}
  3. Проверка изменений:
    После редактирования спецификаций, как обычный пользователь выполните:

    g++ -dM -E -x c++ /dev/null | grep __cplusplus

    Вы должны увидеть, что стандарт C++14 теперь установлен как стандарт по умолчанию.

Заключение

Используя один из вышеописанных методов, вы сможете значительно упростить процесс компиляции программ на C++. Выбор конкретного подхода зависит от ваших предпочтений и сценария использования. Если вы ищете удобство и простоту, метод с использованием alias будет наиболее предпочтителен.

Оцените материал
Добавить комментарий

Капча загружается...