技術共有

sublime で C 20 の使用を実装するために sublime で C コンパイラー (.sublime-build) を構成する、初心者向けチュートリアル

2024-07-12

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

1. 事前準備

まず、C++ 環境を準備する必要があります。現在の C++ 環境が構成されていて、C++ バージョンが日常のニーズを満たすことができると思われる場合は、次の 2 つのコマンドを使用して C++ バージョンをクエリできます。

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

返されたバージョンでニーズが解決できるかどうかを判断してください。現在のバージョンで今後の使用がサポートされると思われる場合は、JSON ファイルの構成の第 2 段階に直接進んでください。

  • GCCC4.8 の新機能:C++11対応(部分的)
  • GCCC4.9 の新機能: C++11 および C++14 をサポート (部分的)
  • GCC 5: C++14 の完全サポート
  • GCC 6:C++14およびC++17をサポート(部分的)
  • GCC 7: 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++ が設定されていないことが判明した場合、または現在のバージョンでは日々の学習をサポートできないと思われる場合は、C++ をダウンロードする必要があります。Minw で C++ 環境を設定する

現在、最新の Minw をデモンストレーションとして使用しています。

![[貼り付けた画像 20240711232026.png]]

ダウンロード後、既知のフォルダーに解凍し、解凍されたファイル パスを開いて bin ファイルを見つけます。

[[貼り付けた画像 20240711232411.png]]

開いたら、上記のファイル パスをコピーします。解凍するときは、英語の完全なパスを使用することをお勧めします。

e.g. : D:ProgramFilesmingw64bin
  • 1
  1. システム環境変数を編集する

貼り付けた画像 20240711232650

  1. 環境変数…
    ![[貼り付けた画像 20240711232725.png]]

  2. 下のパスのコンテンツを編集し、[編集]->[新規] をクリックしてパスを上に配置し、このパスを選択して一番上に移動します。
    ![[貼り付けた画像 20240711232813.png]]

  3. [OK] をクリックし続けて完了します。

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++ バージョンを参照して、最新バージョンの C++ でコンパイルできるように JSON ファイルを更新する必要があります。

{  
   "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

具体的な変更はたった 1 行のコードです

![[貼り付けた画像 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