LoginSignup
4
8

More than 3 years have passed since last update.

llvm-mingw(clang) + ninja + cmake で Windows で self-contained な C/C++ 開発環境を整える

Last updated at Posted at 2020-05-04

背景

Windows 10 64bit(x86) を想定します.

以下のような要望が多くあります.

  • 手っ取り早く Windows で C/C++ 開発環境を整えたい.
  • インターネットに接続できないなど, セキュリティ制限のある環境でも C/C++ 開発できるようにしたい
    • C++ を, 幼稚園/保育園や小学校で教えるときなど
    • 一台の PC を共有して C/C++ を教えるときなど.
  • CI ビルドなどでビルドを回したい
  • msys とか, Visual Studio とか, インストールがめんどい
    • Visual Studio の場合, さらに Microsoft アカウント登録が必要になりめんどい
    • たとえば優秀な幼稚園児さまがアカウント取得する場合, 保護者(親権者)の承諾が必要となり, 優秀な幼稚園児さまがご自身で C++ を極めようとするのに向いていない.
    • インストールタイプの多くは, 管理者権限が必要
  • clang を wasm でブラウザで無理やり動かすというのもあるが, 激重である.
  • 最先端 C/C++ 開発環境の入った CD-ROM を売りさばいてがっぽがっぽしたい.

フォルダだけで完結(self-contained)すると, これらの問題が解決できます!

(CI で MSVC を使いたい場合, おまけのところに, MSVC compiler だけインストールする方法も書きました)

構成

これだけです! これだけで最新かつ最先端の 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 などを使う必要はありません(使ったほうがファイル操作はやりやすいですが).

アンインストール

アンインストールもかんたんです!

フォルダを消すだけです :smile:

エディタは ...?

コンパイラとビルドはこれで整いましたが, エディタの問題が残ります.

最近ですと, 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++ トレーニングキットとして売りさばいてがっぽがっぽしたい.
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8