Обмен технологиями

Настройте компилятор C (.sublime-build) в Sublime, чтобы реализовать использование C 20 в Sublime, учебник для начинающих.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Предварительная подготовка

Сначала нам нужно подготовить среду C++. Конечно, если вы чувствуете, что ваша текущая среда C++ настроена и версия C++ может удовлетворить ваши повседневные потребности, вы можете использовать следующие две команды для запроса версии C++.

g++ -v
  • 1
g++ --version
  • 1

Просто оцените, могут ли ваши потребности быть решены с помощью возвращенной версии. Если вы считаете, что текущая версия может поддерживать ваше дальнейшее использование, перейдите непосредственно ко второму этапу настройки файла JSON.

  • ССЗ 4.8: Поддержка C++11 (частичная)
  • ССЗ 4.9: поддерживает C++11 и C++14 (частично).
  • ССЗ 5: Полная поддержка C++14.
  • ССЗ 6: поддерживает C++14 и C++17 (частично).
  • ССЗ 7: поддерживает C++17 (в основном)
  • ССЗ 8: Полностью поддерживает C++17, частично поддерживает C++20.
  • ССЗ 9: Поддержка дополнительных функций C++20.
  • ССЗ 10: поддерживает большинство функций C++20.
  • ССЗ 11: Более полная поддержка C++20.
  • ССЗ 12: поддерживает почти все функции C++20.
  • GCC 13 и более поздние версии: добавить полную поддержку C++20 и начать поддержку C++23.

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

В настоящее время я использую свой последний Mingw в качестве демонстрации.

![[Вставленное изображение 20240711232026.png]]

После загрузки разархивируйте его в известную вам папку, откройте путь к разархивированному файлу и найдите файл bin.

[[Вставленное изображение 20240711232411.png]]

После открытия скопируйте указанный выше путь к файлу. При распаковке лучше всего использовать полный путь на английском языке.

e.g. : D:ProgramFilesmingw64bin
  • 1
  1. Редактировать переменные системной среды

Вставленное изображение 20240711232650

  1. Переменные среды…
    ![[Вставленное изображение 20240711232725.png]]

  2. Отредактируйте содержимое в Path ниже, Edit->New, поместите путь вверх, выберите этот путь и переместите его наверх.
    ![[Вставленное изображение 20240711232813.png]]

  3. Продолжайте нажимать ОК для завершения.

Я тестирую версию g++.

2. Конфигурация среды

Инструменты -> Система компиляции -----> Новая система компиляции... создаст файл *.sublime-build, в котором настроен файл C++ JSON. Конечно, вы также можете изменить существующий файл компиляции.

1. Дурацкий метод настройки

Скопируйте следующий код в файл, упомянутый выше, сохраните его и снова выберите только что отредактированный файл JSON, чтобы скомпилировать C++.

{  
   "shell_cmd": "g++  -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause"",  
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
   "working_dir": "${file_path}",  
   "selector": "source.c++",  
   "encoding": "gbk",  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. Базовый метод настройки

по умолчанию,g++ Компиляторы обычно не используют новейший стандарт C++, а вместо этого используют стабильный стандарт по умолчанию (обычно более старый стандарт, такой как C++14 или C++17), чтобы обеспечить совместимость со старым кодом.Поэтому, если вы явно не укажете-std=c++20 или-std=c++23, компилятор может компилировать с использованием старого стандарта, что может вызвать ошибки при использовании функций нового стандарта.

Поэтому, если мы хотим использовать последний метод компиляции, мы должны обратиться к указанной выше максимальной версии C++, поддерживаемой нашим компилятором, чтобы обновить наш файл JSON для компиляции с последней версией C++.

{  
   "shell_cmd": "g++ -std=c++23 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause"",  
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
   "working_dir": "${file_path}",  
   "selector": "source.c++",  
   "encoding": "gbk",  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Конкретное изменение - это всего лишь одна строка кода.

![[Вставленное изображение 20240711234819.png]]

3. Углубленный анализ

Основные элементы конфигурации

{  
   "shell_cmd": "g++ -std=c++23 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause"",  
   //编译命令,使用C++20标准,指定输入和输出编码为UTF-8和GBK,并启用所有警告。如果编译成功,则启动一个新的命令行窗口运行生成的可执行文件,并在运行结束后暂停窗口。
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", // wrong answer 正则表达式匹配文件名等信息。   
   "working_dir": "${file_path}",  // working_dir 编译的工作区
   "selector": "source.c++",  // 对象
   "encoding": "gbk",  // encoding 编码 : 选择 gbk(国标:包含所有的汉字) 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Создание вариантов текста
{
	[  
       {  
           "name": "Single File Build", // 只编译 
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}""  
       },  
       {  
           "name": "Single File Run",  //只运行
           "shell_cmd": "start cmd /c ""${file_base_name}" & pause""  
       },  
       {  
           "name": "Single File Build & Run", // 编译加运行 
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause""  
       },  


       // 下面为多文件编译 , 请勿使用 。
       {  
           "name": "Multiple Files Build",  
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall *.cpp -o "${file_base_name}""  
       },  
       {  
           "name": "Multiple Files Run",  
           "shell_cmd": "start cmd /c ""${file_base_name}" & pause""  
       },  
       {  
           "name": "Multiple Files Build & Run",  
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall *.cpp -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause""  
       }  
   ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
общий
{  
   "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause"",  
   //编译命令,使用C++20标准,指定输入和输出编码为UTF-8和GBK,并启用所有警告。如果编译成功,则启动一个新的命令行窗口运行生成的可执行文件,并在运行结束后暂停窗口。
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", // wrong answer 正则表达式匹配文件名等信息。   
   "working_dir": "${file_path}",  // working_dir 编译的工作区
   "selector": "source.c++",  // 对象
   "encoding": "gbk",  // encoding 编码 : 选择 gbk(国标:包含所有的汉字) 
   "variants":  
   [  
       {  
           "name": "Single File Build", // 只编译 
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}""  
       },  
       {  
           "name": "Single File Run",  //只运行
           "shell_cmd": "start cmd /c ""${file_base_name}" & pause""  
       },  
       {  
           "name": "Single File Build & Run", // 编译加运行 
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall "${file_name}" -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause""  
       },  


       // 下面为多文件编译 , 请勿使用 。
       {  
           "name": "Multiple Files Build",  
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall *.cpp -o "${file_base_name}""  
       },  
       {  
           "name": "Multiple Files Run",  
           "shell_cmd": "start cmd /c ""${file_base_name}" & pause""  
       },  
       {  
           "name": "Multiple Files Build & Run",  
           "shell_cmd": "g++ -std=c++20 -finput-charset=UTF-8 -fexec-charset=GBK -Wall *.cpp -o "${file_base_name}" && start cmd /c ""${file_base_name}" & pause""  
       }  
   ]  

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39