기술나눔

Sublime에서 C 컴파일러(.sublime-build)를 구성하여 Sublime에서 C 20 사용을 구현하는 초보자 튜토리얼

2024-07-12

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

1. 사전 준비

먼저 C++ 환경을 준비해야 합니다. 물론 현재 C++ 환경이 구성되어 있고 C++ 버전이 일상적인 요구 사항을 충족할 수 있다고 생각되면 다음 두 명령을 사용하여 C++ 버전을 쿼리할 수 있습니다.

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

반환된 버전으로 귀하의 요구사항이 해결될 수 있는지 간단히 판단하십시오. 현재 버전이 향후 사용을 지원할 수 있다고 생각되면 JSON 파일 구성의 두 번째 단계로 바로 이동하십시오.

  • GCC 4.8: C++11 지원(일부)
  • 한국어: GCC 4.9: C++11 및 C++14 지원(일부)
  • 한국어: GCC 5: C++14 완벽 지원
  • 한국어: GCC 6: C++14 및 C++17 지원(일부)
  • GCC7: C++17 지원(주로)
  • 한국어: GCC 8: C++17 전체 지원, C++20 부분 지원
  • 한국어: GCC 9: 더 많은 C++20 기능 지원
  • GCC 10: 대부분의 C++20 기능을 지원합니다.
  • GCC 11: C++20에 대한 더욱 포괄적인 지원
  • GCC 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. 아래 경로에서 내용을 편집하고 편집->새로 만들기, 경로를 올려 놓고 이 경로를 선택하여 맨 위로 이동합니다.
    ![[붙여넣은 이미지 20240711232813.png]]

  3. 계속 확인을 클릭하면 완료됩니다.

g++ 버전을 테스트 중입니다.

2. 환경 구성

도구 -> 컴파일 시스템----> 새 컴파일 시스템...은 C++ JSON 파일이 구성된 *.sublime-build 파일을 생성합니다. 물론 기존 컴파일 파일을 수정할 수도 있습니다.

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