背景
Windows 10 64bit(x86) を想定します.
以下のような要望が多くあります.
- 手っ取り早く Windows で C/C++ 開発環境を整えたい.
- インターネットに接続できないなど, セキュリティ制限のある環境でも C/C++ 開発できるようにしたい
- C++ を, 幼稚園/保育園や小学校で教えるときなど
- 一台の PC を共有して C/C++ を教えるときなど.
- CI ビルドなどでビルドを回したい
- msys とか, Visual Studio とか, インストールがめんどい
- Visual Studio の場合, さらに Microsoft アカウント登録が必要になりめんどい
- たとえば優秀な幼稚園児さまがアカウント取得する場合, 保護者(親権者)の承諾が必要となり, 優秀な幼稚園児さまがご自身で C++ を極めようとするのに向いていない.
- インストールタイプの多くは, 管理者権限が必要
- Visual Studio の場合, さらに Microsoft アカウント登録が必要になりめんどい
- clang を wasm でブラウザで無理やり動かすというのもあるが, 激重である.
- 最先端 C/C++ 開発環境の入った CD-ROM を売りさばいてがっぽがっぽしたい.
フォルダだけで完結(self-contained)すると, これらの問題が解決できます!
(CI で MSVC を使いたい場合, おまけのところに, MSVC compiler だけインストールする方法も書きました)
構成
- llvm-mingw(clang コンパイラ, lld リンカ): https://github.com/mstorsjo/llvm-mingw
- ninja https://ninja-build.org/
- cmake
これだけです! これだけで最新かつ最先端の C/C++ 開発ができます!
llvm-mingw
vlang が推奨していることで存在を知りました.
今までは, Windows で C/C++ 開発だと, MinGW(gcc) + msys が主流だったかとは思いますが, Windows runtime(thread, 例外周りなど)や MSVC なコードと相性が悪かったり, 特に dll やリンカ周りで問題が多かったりします.
TinyEXR のおかげで見つかった ld のバグは記憶に新しいところですね.
https://github.com/syoyo/tinyexr/issues/105
最近は llvm-mingw(clang + lld) の登場により, より Windows(MSVC)と親和性の高いツールチェインが良い感じになってきました.
clang 自体は Visual Studio のコンパイラとして使えたりなどしていますので, MinGW バージョン(コンパイラオプションが gcc 互換)の clang も十分品質が高いと想像できます.
実際, そこそこ複雑(MSVC 依存が多いようなコード)な production level のコードのコンパイルを試しましたが, 無事に動いてくれました.
(ただ, 一部, thread とメモリアラインメント周りで -O2
にしないとうまくいかない例もありました)
ninja, cmake
インストーラー形式ではなく zip などの形式を落として使いましょう.
cmake で, -G Ninja
として ninja でのビルドの generator を選択します.
mingw32-make と異なり, ninja の場合はなにか OS の機能(shell 機能)を使うわけではないようなので, 普通のコマンドプロンプトから動かすことができます!
セットアップ
たんに zip を展開するだけです.
環境変数に llvm-mingw, ninja, cmake の PATH を通すといいかもですが, 多分通さなくても頑張ればうまくいけます.
シェルは Windows 標準のコマンドプロンプトや Powershell でいけます.
(mintty) bash や msys などを使う必要はありません(使ったほうがファイル操作はやりやすいですが).
アンインストール
アンインストールもかんたんです!
フォルダを消すだけです
エディタは ...?
コンパイラとビルドはこれで整いましたが, エディタの問題が残ります.
最近ですと, gvim https://www.vim.org/download.php, VSCode or Theia https://theia-ide.org/ が選択肢でしょうか.
IDE は ...?
VSCode or Theia でしょうか.
Theia を使っている gitpod も気になりますね.
clangd を動かして C/C++ の intellisense っぽいのをやるのは VSCode ありますが, cmake & ninja のビルドのフローまで VSCode 上でできるでしょうか?
おまけ
C++ Build Tools で MSVC 単体をインストールできました.
Visual StudioなしにWindows上でコンパイルする
https://www.infoq.com/jp/news/2016/12/vsbt/
Windows で MSVC ビルドツール (Build Tools) のインストール(Chocolatey を利用)
https://www.kkaneko.jp/tools/win/windows_vc15msbuildtools.html
ありがとうございます.
いろいろところころ名前が変わっているので, ご注意しましょう.
2020/05/05 時点ですと, Build Tools for Visual Studio 2019 をインストールし, そこから C++ ツールをインストールします.
ダウンロード先はいろいろわかりにくいところにあります. 頑張って探しましょう(web サイトでは, まちがって Visual Studio をダウンロードしやすくなっているので注意です)
TODO
-
VSCode 内で, cmake, ninja で Visual Studio っぽく IDE 上でのビルドフローが作れるか試す(cmake から
compile_commands.json
吐けばいけるか?) - Theia ベースで自前で C/C++ IDE 環境を作り, IDE + C/C++ コンパイル一式できる DVD パッケージを作成し, C/C++ トレーニングキットとして売りさばいてがっぽがっぽしたい.