Chocolatey・・・Windows向けのパッケージマネージャで、ソフトウェアをインストール、管理、アップデート、アンインストールするためのツールです。Linuxのaptやyum、macOSのbrewに似た概念

Windows Package Manager (winget)・・・Microsoftが提供するWindows向けの公式パッケージ管理ツール。wingetがmicrosoftが公式に提供しているパッケージマネージャー。

サイト

https://chocolatey.org/

Chocolateyのインストール

インストール方法は、Communityに記載あり。
https://community.chocolatey.org/

Install Chocolatey をクリック

管理者モードでPowerShellを開く

Set-ExecutionPolicy Bypass -Scope Process -Force;
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

以下にchoco.exeがインストールされるのね
C:\ProgramData\chocolatey\bin

> choco -v
2.4.1
# パッケージインストール すべて yes とするなら -y をつける
choco install <パッケージ名>

# パッケージのアップグレード
choco upgrade <パッケージ名>

# 全パッケージ更新
choco upgrade chocolatey

# パッケージのアンインストール
choco uninstall <パッケージ名>

# パッケージの一覧
choco list

# Chocolatey自体の更新
choco upgrade chocolatey

システムの更新やシステム全体を変更するような機能については、管理者モードで起動したシェルで操作はマスト
そうでないものだけ、ユーザー権限でいれれるが基本は管理者モードで操作をする

Github CLIをインストール
通常の権限だと、「パス 'C:\ProgramData\chocolatey.chocolatey' へのアクセスが拒否されました。」だったので、引き続き管理者権限。

choco install gh
Chocolatey v2.4.1
Installing the following packages:
gh
By installing, you accept licenses for the packages.
Downloading package from source 'https://community.chocolatey.org/api/v2/'

gh v2.63.2 [Approved]
gh package files install completed. Performing other installation steps.
The package gh wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): Y

Installing 64-bit gh...
gh has been installed.
  gh may be able to be automatically uninstalled.
Environment Vars (like PATH) have changed. Close/reopen your shell to
 see the changes (or in powershell/cmd.exe just type `refreshenv`).
 The install of gh was successful.
  Software installed as 'MSI', install location is likely default.

Chocolatey installed 1/1 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

>choco list
Chocolatey v2.4.1
chocolatey 2.4.1
gh 2.63.2

Githubの認証を行う ※事前に ssh-keygen -t rsa -b 4096 -f xxxx(好きな名前) で 秘密鍵/公開鍵を作っておく

gh auth login
? Where do you use GitHub? 
> GitHub.com
  Other

? What is your preferred protocol for Git operations on this host?
  HTTPS
> SSH

// アップロードする 公開鍵を選択
? Upload your SSH public key to your GitHub account?
> C:\Users\xxxx\.ssh\xxxxxxxx.pub
  Skip

// GitHubアカウント内で表示される名前を設定
? Title for your SSH key: (GitHub CLI) xxxxxxxxx

? How would you like to authenticate GitHub CLI?
> Login with a web browser
  Paste an authentication token

// web browserを選択すると・・・以下メッセージが表示されるため Enterを押すとブラウザが立ち上がりログイン画面が表示される。
Press Enter to open https://github.com/login/device in your browser...

// ログインすると、one-timeのコードが表示されるのでそれをログイン画面後に表示されるコード入力画面に入力するとログインが完了する
! First copy your one-time code: XXXX-XXXX
✓ Authentication complete.
- gh config set -h github.com git_protocol ssh
✓ Configured git protocol
✓ Uploaded the SSH key to your GitHub account: C:\Users\xxxx\.ssh\xxxxxxxx.pub
✓ Logged in as xxxxxx
投稿日時: 2024-12-20 15:08:20
更新日時: 2025-04-11 17:53:11

もともとVisual Studioを入れていて、C++が書ける状態の時に、
ちょっとしたCのコード書いて動作させたい場合に、Visual Studioでプロジェクトを作るかというとちょっと手間なので
サクッと書いて、サクッと実行できたらと思うので
cl.exeの格納先のパスを通して使ってみる。

Visual Studio 2022だとこんな感じのパス
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\bin\Hostx64\x64

cl コマンドのヘルプを表示
c:\>cl /?
Microsoft(R) C/C++ Optimizing Compiler Version 19.41.34120 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

                         C/C++ COMPILER OPTIONS


                              -最適化-

/O1 最大限の最適化 (スペースを優先)     /O2 最大限の最適化 (速度を優先)
/Ob<n> インライン展開 (既定値 n=0)      /Od 最適化を無効にする (既定)
/Og グローバルな最適化を有効にする      /Oi[-] 組み込み関数を有効にする
/Os コード スペースを優先する           /Ot コードのスピードを優先する
/Ox 最適化 (速度を優先)
/favor:<blend|AMD64|INTEL64|ATOM> 最適化するプロセッサを、次から 1 つ選択する:
   blend - いくつかの異なる x64 プロセッサ用の最適化の組み合わせ
   AMD64 - 64 ビット AMD プロセッサ
   INTEL64: Intel(R)64 アーキテクチャ プロセッサ
   ATOM - Intel(R) Atom(TM) プロセッサ

                             -コード生成-

/Gu[-] は、個別の関数に個別のアドレスが含まれるようにします
/Gw[-] リンカー用の個別のグローバル変数
/GF 読み取り専用の文字列プールを有効にする
/Gy[-] リンカーの別の機能               /GS[-] セキュリティ チェックを有効にする
/GR[-] C++ RTTI を有効にする
/guard:cf[-] は CFG (Control Flow Guard) を有効にします
/guard:ehcont[-] EH 継続メタデータ (CET) を有効にする
/EHs C++ EH を有効にする (SEH 例外なし) /EHa C++ EH を有効にする (SEH 例外あり)
([return] キーを押すと継続)
/EHc extern "C" は既定の nothrow になる
/EHr 常に noexcept ランタイム終了チェックを生成する
/fp:<contract|except[-]|fast|precise|strict> 浮動小数点モデルの選択:
   contract - コードを生成するときに浮動小数点の短縮形を検討する
   except[-] - コードの生成中に浮動小数点の例外を考慮します
   fast - "fast" 浮動小数点モデルです。結果の予測が困難になります
   precise - "precise" 浮動小数点モデルです。結果は予測可能です
   strict - "strict" 浮動小数点モデルです (/fp:except を暗示)
/fp:except を指定しても /Qfast_transcendentals を指定するとインライン FP 組み込みが生成されます
/Qspectre[-] CVE 2017-5753 に対する軽減策を有効にする
/Qpar[-] 並列コード生成を有効にする
/Qpar-report:1 自動並行化診断。並行化されたループを示します
/Qpar-report:2 自動並行化診断。並行化されていないループを示します
/Qvec-report:1 自動ベクトル化診断。ベクトル化されたループを示します
/Qvec-report:2 自動ベクトル化診断。ベクトル化されていないループを示します
/GL[-] リンク時のコード生成を有効にする
/volatile:<iso|ms> 揮発性モデルを選択します:
   iso - 揮発性アクセスで取得/解除セマンティクスは保証されません
   ms  - 揮発性アクセスで取得/解除セマンティクスは保証されます
/GA Windows アプリケーション用の最適化を行う
/Ge すべての関数にスタック チェックを強制する
/Gs[num] スタック チェックの呼び出しを制御する
/Gh _penter 関数呼び出しを有効にする    /GH _pexit 関数呼び出しを有効にする
/GT ファイバー セーフの TLS アクセスを生成する
/RTC1 高速チェックを有効にする (/RTCsu) /RTCc 小さい型のチェックに変換する
/RTCs スタック フレーム ランタイム チェック
/RTCu 初期化されていないローカル変数のチェック
/clr[:option] 次のオプションが指定される場合、共通言語ランタイム用にコンパイルする:
   pure : ネイティブな実行可能コードではなく、IL のみの出力ファイルを作成する
   safe : IL のみの検証可能な出力ファイルを作成する
   netcore : .NET Core ランタイムを対象とするアセンブリを生成する
   noAssembly : アセンブリを生成しない
   nostdlib : アセンブリを検索するときにシステムの .NET Framework ディレクトリを無視する
   nostdimport : 必要なアセンブリを暗黙的にインポートしない
   initialAppDomain : Visual C++ 2002 の最初の AppDomain 動作を有効にする
   implicitKeepAlive- : turn off implicit emission of System::GC::KeepAlive(this)
/fsanitize=address は Address Sanitizer の CodeGen を有効化します
/homeparams レジスタ内で渡されたパラメーターを強制的にスタックに書き込む
/GZ スタック チェックを有効にする (/RTCs)
/Gv __vectorcall の呼び出し規約
/arch:<SSE2|SSE4.2|AVX|AVX2|AVX512> CPU アーキテクチャの最低要件。以下のいずれか:
  SSE2 - (既定) SSE2 対応の CPU で使用できる命令を使用可能にする
  SSE4.2 - SSE 4.2 対応の CPU で使用できる命令を使用可能にする
  AVX - AVX 対応の CPU で使用できる命令を使用可能にする
  AVX2 - AVX2 対応の CPU で使用できる命令を使用可能にする
  AVX512 - AVX-512 対応の CPU で使用できる命令を使用可能にする
/QIntel-jcc-erratum Intel JCC erratum に対する軽減策を有効にする
/Qspectre-load メモリを読み込むすべての命令に対して、Spectre 軽減策を有効にします
/Qspectre-load-cf メモリを読み込むすべての制御フロー命令に対して、Spectre 軽減策を有効にします
/Qspectre-jmp[-] 無条件ジャンプ命令の Spectre 軽減策を有効にする
/fpcvt:<IA|BC> FP から符号なし整数への変換の互換性
  IA - VCVTTSD2USI 命令と互換性のある結果
  BC - VS2017 以前のコンパイラと互換性のある結果
/jumptablerdata switch case ステートメントのジャンプ テーブルを .rdata セクションに配置する

                              -出力ファイル-

/Fa[file] アセンブリ リスティング ファイルに名前を付けます
/FA[scu] アセンブリ リストを設定する    /Fd[file] .PDB ファイル名を指定する
/Fe<file> .EXE ファイルに名前を付けます
/Fm[file] マップ ファイルに名前を付けます
/Fo<file> オブジェクト ファイルに名前を付けます
/Fp<file> プリコンパイル済みヘッダー ファイル名を指定する
/Fr[file] ソース ブラウザー ファイル名を指定する
/FR[file] .SBR 拡張ファイルを指定する
/Fi[file] 前処理されたファイルに名前を付けます
/Fd: <file> .PDB ファイル名を指定する   /Fe: <file> 実行可能ファイル名を指定する
/Fm: <file> マップ ファイル名を指定する
/Fo: <file> オブジェクト ファイル名を指定する
/Fp: <file> .PCH ファイル名を指定する   /FR: <file> .SBR 拡張ファイルを指定する
/Fi: <file> 前処理されたファイル名を指定する
/Ft<dir> #import 用に生成されたヘッダー ファイルの場所
/doc[file] XML ドキュメント コメントを処理し、.xdc ファイルの名前を指定する

                              -プリプロセッサ-

/AI<dir> アセンブリ検索パスに追加する
/FU<file> .NET アセンブリ/モジュールのインポートする
/FU:asFriend<file> .NET アセンブリ/モジュールをフレンドとしてインポートする
/C コメントを削除しません               /D<name>{=|#}<text> マクロを定義する
/E stdout に前処理します                /EP stdout に前処理する、#line なし
/P ファイルを前処理する                 /Fx 挿入コードをファイルにマージする
/FI<file> 必ず使用されるインクルード ファイルに名前を付けます
/U<name> 定義済みのマクロを削除する     /u 定義済みのマクロをすべて削除する
/I<dir> インクルード検索パスに追加する  /X "standard places" を無視する
/PH 前処理時に #pragma file_hash を生成します
/PD すべてのマクロ定義を出力する

                                -言語-

/std:<c++14|c++17|c++20|c++latest> C++ 標準バージョン
    c++14 – ISO/IEC 14882:2014 (既定)
    c++17 – ISO/IEC 14882:2017
    c++20 - ISO/IEC 14882:2020
    c++latest – 標準の最終草案 (機能セットは変更される可能性があります)
/std:<c11|c17|clatest> C 標準バージョン
   c11 - ISO/IEC 9899:2011
   c17 - ISO/IEC 9899:2018
   clatest - 最新のドラフト標準 (機能セットは変更される可能性があります)
/permissive[-] 一部の不適合なコードをコンパイルできるようにします
              (機能セットは変更される可能性があります) (C++20 以降では既定でオフ)
/Za 拡張機能を無効にする (C++ では推奨されません)
/ZW WinRT 言語拡張を有効にします        /Zs 構文チェックのみ
/await 再開可能な関数の拡張機能を有効にする
/await:strict enable: 標準 C++ 20 コルーチンサポートを以前の言語バージョンで有効にする
/constexpr:depth<N>     constexpr 評価の再帰の深さ限度 (既定: 512)
/constexpr:backtrace<N> 診断での N constexpr 評価を示します (既定: 10)
/constexpr:steps<N>     N ステップ後に constexpr 評価を終了します (既定: 1048576)
/Zi デバッグ情報を有効にします          /Z7 前の形式のデバッグ情報を有効にします
/Zo[-] 最適化されたコードのより詳細なデバッグ情報を生成します (既定ではオン)
/ZH: [MD5 |SHA1 |SHA_256] デバッグ情報でファイルのチェックサムを計算するためのハッシュ アルゴリズム (既定値: SHA_256)
/Zp[n] 構造体を n バイト境界でパックします
/Zl .OBJ で既定のライブラリ名を省略します
/vd{0|1|2} vtordisp を無効/有効にします /vm<x> メンバーへのポインターの種類
/Zc:arg1[,arg2] 言語準拠です。引数は次のようになります:
 forScope[-]           スコープ ルールに標準 C++ を適用します
 wchar_t[-]            wchar_t はネイティブ型であって、typedef ではありません
 auto[-]               新しい標準 C++ の解釈を auto に適用します
 trigraphs[-]          トライグラフを有効にします (既定ではオフ)
 rvalueCast[-]         標準 C++ の明示的な型変換ルールを適用します
                       (C++20 以降では既定でオン、/permissive- によって暗黙的)
 strictStrings[-]      文字列リテラルを無効にして [char|wchar_t]* にします
                       変換 (C++20 以降では既定でオン、/permissive- によって暗黙的)
 implicitNoexcept[-]   必須関数に対する暗黙的な noexcept を有効にします
 threadSafeInit[-]     スレッドセーフであるローカルの静的な初期化を有効にします
 inline[-]             参照されていない関数またはデータを削除する
                       COMDAT または内部リンケージのみ (既定ではオフ)
 sizedDealloc[-]      C++14 グローバル サイズの割り当て解除を有効にする
                       関数 (既定ではオン)
 throwingNew[-]        演算子 new が失敗時にスローすることを想定しています (既定ではオフ)
 referenceBinding[-]   テンポラリは non-const にバインドされません
                       lvalue 参照 (C++20 以降では既定でオン、/permissive- によって暗黙的)
 twoPhase-             2 フェーズの名前検索を無効にします
 ternary[-]            C++ 11 ルールを条件演算子に適用します
                       (C++20 以降では既定でオン、/permissive- によって暗黙的)
 noexceptTypes[-]      C ++17 noexcept ルールを適用します (既定では C++17 以降でオン)
 alignedNew[-]         動的に割り当てられたオブジェクトの C++17 のアラインメントを有効にします (既定ではオン)
 hiddenFriend[-]        標準の C++ 隠しフレンド ルールを適用する
                       (C++20 以降では既定でオン、/permissive- によって暗黙的)
 externC[-]            標準 C++ ルールを 'extern "C"' 関数に適用します
                       (C++20 以降では既定でオン、/permissive- によって暗黙的)
 lambda[-]             新しいラムダ プロセッサを使用してラムダ サポートを強化します
                       (C++20 以降では既定でオン、/permissive- によって暗黙的)
 tlsGuards[-]          TLS 変数の初期化のランタイム チェックを生成します (既定ではオン)
 zeroSizeArrayNew[-]   メンバー new または delete をサイズが 0 の配列のオブジェクトに対して呼び出します (既定ではオン)
 static_assert[-]      'static_assert' の厳密な処理 (C++20 以降では既定でオン、
                       /permissive- によって暗黙的に指定されます)
 gotoScope[-]          は変数の初期化を超えることはできません (/permissive- によって暗黙的に指定)
 templateScope[-]      標準 C++ テンプレート パラメーター シャドウ処理ルールを適用する
 enumTypes[-] 標準 C++ の基になる列挙型を有効にする (既定ではオフ)
 checkGwOdr[-]          標準 C++ の 1 つの定義ルール違反を強制する
                       /Gw が有効になっている場合 (既定ではオフ)
 nrvo[-]               オプションのコピーと移動の省略を有効にします (C++20 以降では既定でオン、
                       /permissive- または /O2 によって暗示されます)
 C で __STDC__              を 1 に定義__STDC__
 __cplusplus[-]        __cplusplus マクロは、サポートされている C++ 標準を報告します (既定ではオフ)
 char8_t[-]            C++20 ネイティブ 'u8' リテラル サポートを 'const char8_t' として有効にします
                       (C++20 以降では既定でオン)
 externConstexpr[-] C++ で constexpr 変数の外部リンケージを有効にする
                       (C++20 以降では既定でオン、/permissive- によって暗黙的)
 preprocessor[-]        C/C++ で標準準拠プリプロセッサを有効にする
                       (C11 以降では既定でオン)
/ZI エディット コンティニュのデバッグ情報を有効にする
/openmp OpenMP 2.0 言語拡張を有効にする
/openmp:experimental では、OpenMP 2.0 言語拡張機能が使用可能になり、OpenMP 3.0+ 言語拡張機能が選択されます
LLVM ランタイムが使用されている /openmp:llvm OpenMP 言語拡張

                              -その他-

@<file> オプション応答ファイル
/?, /help このヘルプ メッセージを出力します
/bigobj 拡張オブジェクトの形式を生成する/c コンパイルのみ。リンクなし
/FC 診断で完全パス名を使用する          /H<num> 最大の外部名の長さ
/J 文字型を既定で unsigned にする
/MP[n] はコンパイル時に最大で 'n' 個のプロセスが使用されます
/nologo 著作権メッセージを表示しません
/showIncludes インクルード ファイル名を表示する
/Tc<source file> ファイルを .c としてコンパイルする
/Tp<source file> ファイルを .cpp としてコンパイルする
/TC すべてのファイルを .c としてコンパイルする
/TP すべてのファイルを .cpp としてコンパイルする
/V<string> バージョン文字列を設定します /Yc[file] .PCH ファイルを作成する
/Yd デバッグ情報をすべての .OBJ に保存する
/Yl[sym] デバッグ ライブラリで使用する .PCH 参照を投入する
/Yu[file] .PCH ファイルを使用する       /Y- PCH オプションをすべて無効にする
/Zm<n> 最大メモリの割り当て (既定の %)  /FS 強制的に MSPDBSRV.EXE を使用する
/source-charset:<iana-name>|.nnnn は、ソース文字セットを設定します
/execution-charset:<iana-name>|.nnnn は、実行文字セットを設定します
/utf-8 は、ソースおよび実行文字セットを UTF-8 に設定します
/validate-charset[-] では、有効な文字に対してのみ UTF-8 ファイルが検証されます
/fastfail[-] は、fast-fail モードを有効にします
/JMC[-] は、ネイティブの「マイ コードのみ」を有効にします
/presetPadding[-] スタック ベースのクラス型のパディングをゼロに初期化する
/volatileMetadata [-] は、揮発性メモリアクセスでメタデータを生成します
ソース リンク情報を含む /sourcelink [file] ファイル

                                -リンク-

/LD .DLL を作成する                     /LDd .DLL デバッグ ライブラリを作成する
/LN .netmodule を作成する               /F<num> スタック サイズを設定する
/link [リンカー オプションとライブラリ] /MD MSVCRT.LIB でリンクする
/MT LIBCMT.LIB でリンクする
/MDd MSVCRTD.LIB デバッグ ライブラリでリンクする
/MTd LIBCMTd.LIB デバッグ ライブラリでリンクする

                              -Code Analysis-

/analyze[-] ネイティブの分析を有効にする
/analyze:quiet[-] コンソールに警告を表示しない
/analyze:log<name> ファイルに警告を記録する
/analyze:autolog ログの記録先: *.pftlog
/analyze:autolog:ext<ext> *.<ext> にログを記録する
/analyze:autolog- ログ ファイルなし     /analyze:WX- 致命的でない警告
/analyze:stacksize<num> スタック フレームの最大サイズ
/analyze:max_paths<num> パスの最大数    /analyze:only 分析のみ、コード生成なし

                              -診断-

/diagnostics:<引数,...> 診断メッセージの形式を制御します:
             classic - 以前の形式を保持します
             column[-] - 列情報を出力します
             caret[-] - 列および指定したソース行を出力します
/Wall 警告をすべて有効にする            /w   警告をすべて無効にします
/W<n> 警告レベルを設定する (既定 n=1)
/Wv:xx[.yy[.zzzzz]] はバージョン xx.yy.zzzzz 以降に導入された警告を無効にします
/WX 警告をエラーとして扱います          /WL 1 行診断を有効にします
/wd<n> 警告 n を無効にします            /we<n> 警告 n をエラーとして扱う
/wo<n> 警告 n を 1 回だけ表示します
/w<l><n> n の警告レベルを 1 ~ 4 に設定します
/external:I <path>      – 外部ヘッダーの場所
/external:env:<変数>     – 外部ヘッダーの場所が含まれる環境変数
/external:anglebrackets – <> に含まれているヘッダーすべてを外部ヘッダーとして処理します
/external:W<数字>          – 外部ヘッダーの警告レベル
/external:templates[-]  – テンプレート インスタンス化チェーンにおける警告レベルを評価します
/sdl 追加のセキュリティ機能と警告を有効にする
/options:strict 認識されないコンパイラオプションはエラーです

とりあえず、ミニマムでVisual Studio CodeでCのビルドしてみます

拡張機能は、C/C++(Microsoft)をインストール

open folderでフォルダを開きます

Shift + Ctrl + P で「C/C++: Edit Configurations (UI)」を選択
.vscode/c_cpp_properties.jsonを作成

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\include",
                "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared",
                "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt",
                "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.22621.0",
            "compilerPath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\Hostx64\\x64\\cl.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "msvc-x64",
            "browse": {
                "path": [
                    "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\include",
                    "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared",
                    "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt",
                    "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um"
                ]
            }
        }
    ],
    "version": 4
}

ビルドのため、メニューのTerminalからConfigure Tasks を選択
C/C++: cl.exe cuild active fileを選択

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: cl.exe build!",
			"command": "cl.exe",
			"args": [
				"/Zi",
				"/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
				"${file}",
				"/I",
				"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\include",
				"/I",
				"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared",
				"/I",
				"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt",
				"/I",
				"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um",
				"/link",
				"/LIBPATH:C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64",
				"/LIBPATH:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.22621.0\\ucrt\\x64",
				"/LIBPATH:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.22621.0\\um\\x64"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$msCompile"
			],
			"group": "build",
			"detail": "compiler: cl.exe"
		}
	]
}

設定を再読み込みするため、 Shift + Ctrl + Pで Developer: Reload Windowで更新

適当なソースを作成
ソースコード(Sample.c)は以下

#include <stdio.h>

int main (){
    printf("hello c lang");
    return 0;
}

Shift + Ctrl + b で"C/C++: cl.exe build!"を選択しビルド

Sample.exeがつくられるので実行すると

> .\Sample.exe
hello c lang
投稿日時: 2024-12-09 11:41:09
更新日時: 2024-12-12 14:01:12

YeomanとVSCode拡張ジェネレータのインストール

npm install -g yo generator-code

作成したいフォルダへ移動

フォルダ作成し、そのフォルダへ移動

mkdir ext001
cd ext001

VSCode拡張機能のひな形を作成

yo code

※質問に応じて適宜答えてひな形を作成する

こんな感じ

初期状態のコード(extention.js)は以下のとおり

// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
const vscode = require('vscode');

// This method is called when your extension is activated
// Your extension is activated the very first time the command is executed

/**
 * @param {vscode.ExtensionContext} context
 */
function activate(context) {

	// Use the console to output diagnostic information (console.log) and errors (console.error)
	// This line of code will only be executed once when your extension is activated
	console.log('Congratulations, your extension "ext001" is now active!');

	// The command has been defined in the package.json file
	// Now provide the implementation of the command with  registerCommand
	// The commandId parameter must match the command field in package.json
	const disposable = vscode.commands.registerCommand('ext001.helloWorld', function () {
		// The code you place here will be executed every time your command is executed

		// Display a message box to the user
		vscode.window.showInformationMessage('Hello World from ext001!');
	});

	context.subscriptions.push(disposable);
}

// This method is called when your extension is deactivated
function deactivate() {}

module.exports = {
	activate,
	deactivate
}

registerCommandにext001.helloWorldが登録されていてこれが実行されると
初期状態のコードでは、 Hello World form ext001! と表示することになります。

なお、この機能をよびだすためには、package.jsonでcommandsの項目でコマンド名とそのタイトルを設定するところがあり
タイトルの名称がコマンドパレットで入力する名称になります。

  "contributes": {
    "commands": [{
      "command": "ext001.helloWorld",
      "title": "Hello World"
    }]
  },

F5を実行するとデバッグ用に本拡張機能が組み込まれた状態の別のVSCodeウィンドウがたちあがる
Shift + Ctrl + P でコマンドパレットを開き Hello Worldを入力

実行すると

メッセージが表示されます

パッケージ

vsceのインストール

 npm install -g vsce

現在のバージョンは2.15.0とのこと

vsce --version
2.15.0

オフィシャルに公開するのではなく、業務する人たちなど限られた人に公開したい場合packageを作成しそれを渡してインストールしてもらう
package を作成

vsce package
 ERROR  Make sure to edit the README.md file before you package or publish your extension.

Errorがでます。
どうやら、READMEのデフォルトのままだと、ある行をチェックしそのまま残っているとエラーとしているようです。
3行目の内容が残っているとチェックでひっかかるらしい

This is the README for your extension "ext001". After writing up a brief description, we recommend including the following sections.

後で項目追加しなさいよ!って書いてあるのにそのまま残っていると何もしてないからだめねということなんでしょうかねぇ。
とりあえず実行したいだけなので、3行目をとっぱらって、しまいます。

あらためてpackage

vsce package
 WARNING  A 'repository' field is missing from the 'package.json' manifest file.
Do you want to continue? [y/N] y
 WARNING  LICENSE.md, LICENSE.txt or LICENSE not found
Do you want to continue? [y/N] y
 DONE  Packaged: C:\develop\VSCode\ext001\ext001\ext001-0.0.1.vsix (6 files, 3.45KB)

インストールは、拡張機能からVSIXのインストールのメニューがあるのでそちらからファイル選択ダイアログからファイルを選択

投稿日時: 2024-11-10 04:55:10
更新日時: 2024-11-10 05:17:10

最近の投稿

最近のコメント

タグ

アーカイブ

その他