Compartilhamento de tecnologia

Configure o compilador C (.sublime-build) no sublime para implementar o uso do C 20 no sublime, tutorial para iniciantes

2024-07-12

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

1. Preparação preliminar

Primeiro precisamos preparar o ambiente C++. Claro, se você acha que seu ambiente C++ atual está configurado e a versão C++ pode atender às suas necessidades diárias, você pode usar os dois comandos a seguir para consultar a versão C++.

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

Simplesmente julgue se suas necessidades podem ser resolvidas pela versão retornada. Se você acha que a versão atual pode suportar seu uso posterior, vá diretamente para o segundo estágio de configuração do arquivo JSON.

  • GCC 4.8: Suporte C++ 11 (parcial)
  • GCC 4.9: Suporta C++11 e C++14 (parcial)
  • GCC 5: Suporte total para C++14
  • GCC 6: Suporta C++14 e C++17 (parcial)
  • GCC 7: Suporta C++17 (principalmente)
  • GCC 8: Suporta totalmente C++17, suporta parcialmente C++20
  • GCC 9: Suporta mais recursos do C++20
  • GCC 10: Suporta a maioria dos recursos do C++20
  • GCC 11: Suporte mais abrangente para C++20
  • GCC 12: Suporta quase todos os recursos do C++20
  • GCC 13 e posterior: Adicionar suporte completo para C++20 e iniciar suporte para C++23

Se você achar que não configurou seu C++ ou acha que a versão atual não suporta o aprendizado diário, será necessário baixar umMingw configura ambiente C++

Atualmente eu uso meu Mingw mais recente como demonstração

![[Imagem colada 20240711232026.png]]

Após o download, descompacte-o em uma pasta que você conhece, abra o caminho do arquivo descompactado e encontre um arquivo bin

[[Imagem colada 20240711232411.png]]

Após abri-lo, copie o caminho do arquivo acima. É melhor usar o caminho completo em inglês ao descompactar.

e.g. : D:ProgramFilesmingw64bin
  • 1
  1. Editar variáveis ​​de ambiente do sistema

Imagem colada 20240711232650

  1. Variáveis ​​ambientais…
    ![[Imagem colada 20240711232725.png]]

  2. Edite o conteúdo em Caminho abaixo, Editar->Novo, coloque o caminho para cima, selecione este caminho e mova-o para o topo.
    ![[Imagem colada 20240711232813.png]]

  3. Continue clicando em OK para concluir.

Estou testando a versão g++.

2. Configuração do ambiente

Ferramentas -> Sistema de Compilação-----> Novo Sistema de Compilação... irá gerar um arquivo *.sublime-build no qual o arquivo JSON C++ é configurado. Claro, você também pode modificar o arquivo de compilação existente.

1. Método de configuração de estilo tolo

Copie o código a seguir para o arquivo mencionado acima, salve-o e selecione novamente o arquivo JSON que você acabou de editar para compilar 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. Método de configuração básica

por padrão,g++ Os compiladores normalmente não usam o padrão C++ mais recente, mas em vez disso usam um padrão padrão estável (geralmente um padrão mais antigo, como C++14 ou C++17) para garantir compatibilidade com código mais antigo.Então, se você não especificar explicitamente-std=c++20 ou-std=c++23, o compilador poderá compilar usando um padrão mais antigo, o que pode causar erros ao usar recursos do novo padrão.

Portanto, se quisermos usar o método de compilação mais recente, devemos consultar o acima, a versão máxima do C++ suportada pelo nosso compilador, para atualizar nosso arquivo JSON para compilar com a versão mais recente do 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

A mudança específica é apenas uma linha de código

![[Imagem colada 20240711234819.png]]

3. Análise aprofundada

Itens de configuração básica

{  
   "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
Crie variações de texto
{
	[  
       {  
           "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
total
{  
   "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