LoginSignup
11
22

More than 3 years have passed since last update.

Windows10でMSYS2でC++環境を作る

Last updated at Posted at 2019-08-15

WindowsでC++

自分用にメモしておきます。
以下のようなWindows10でC++をコンパイルして実行出来る最低限の環境を作ります。
Windows10上でインストーラを使ってインストールする物は極力減らす方針です。

  • Windows10でC++をコンパイルして実行できる
  • Visual StudioとかのIDEは覚える事が多いので出来ればシンプルにしたい
  • Makeも使える方が嬉しいしGitも使ってみたい

作る環境

  • Windows10
  • Visual Studio Code (VSCode)
  • MSYS2

以上の3要素でC++を最低限コンパイル出来る環境を目指す。
ターミナルとかGitとかMakeとかはMSYS2の物を使う。

Visual Studio Code (VSCode)をインストール

ダウンロードして画面に従いインストールを行う。

MSYS2をインストール

ページ上部からmsys2-x64_86-(date).exeをダウンロードし、ページの手順に沿ってインストールを行う。

MSYS2 MSYSを起動してパッケージを更新する。

パッケージの更新
$ pacman -Syu

途中でMSYS2を再起動する事になるので再起動した後に以下で残りを更新する。

残りの更新
$ pacman -Su

MSYS2で以下のコマンドを実行しC/C++環境に必要なパッケージを入手する。

MSYS2
$ pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb make git

ここまでやるとMSYS2上でgccが使えるようになっていると思うので、MSYS2で以下を実行してテストする。

MSYS2
$ gcc -v
$ make -v
$ git --version

正しく実行出来るとバージョン情報が表示される。

ホームディレクトリの設定

デフォルトではMSYS2のホームディレクトリはC:\msys64\home\ユーザー名に設定されている。
ホームディレクトリの変更自体はexport HOME=/C/Users/ユーザー名すれば良いが、OpenSSHの鍵の参照先が$HOME/.ssh/ではなくて/home/ユーザー名/.ssh/を直接参照するため、別の手段を設定する必要が有る。

そこで、今回はWindows10の付属機能でC:\msys64\homeからC:\Usersへシンボリックリンクを貼る。

事前にC:\msys64\home\ユーザー名の中身をC:\Users\ユーザー名に移動して、C:\msys64\homeディレクトリを削除しておく。

cmd.exe(管理者権限モード)
$ mklink /D C:\msys64\home C:\Users

他には/etc/fstabを書く方法が有るらしいが今回はこれで。

VSCodeでMSYS2のGitを使えるように下準備

C:\msys64\usr\bin\git-wrap.batに以下を記述して保存する。

git-wrap.bat
@echo off
setlocal

rem If you don't add path for msys2 into %PATH%, enable following line.
rem set PATH=c:\msys64\usr\bin;%PATH%

if "%1" equ "rev-parse" goto rev_parse
git %*
goto :eof
:rev_parse
for /f %%1 in ('git %*') do cygpath -w %%1

VSCodeの設定

設定ファイルを開く

Ctrl + Shift + Pでコマンド検索欄を出す。
opensettingsとか入力するとPreferences: Open Settings (JSON)が見つかるので選ぶとsettings.jsonが開かれる

設定の追記

ファイルを以下のように編集する。既に何かあるならカッコやカンマとか構造を壊さないように追記する。
特に最初と最後のカッコ{...}を忘れないように。

settings.json
{
    // VSCodeで使うターミナルの設定
    "terminal.integrated.shell.windows": "C:/msys64/usr/bin/bash.exe",
    "terminal.integrated.env.windows": {
        // inheritにする事でWindows10のPATHを引き継ぐ
        // 引き継がない場合はコメントアウト
        "MSYS2_PATH_TYPE": "inherit",
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING": "1"
    },
    "terminal.integrated.shellArgs.windows": [
        "--login"
    ],
    "terminal.integrated.cursorStyle": "line",
    // Gitのパスの設定(先ほど作ったバッチファイルを読み込むように)
    "git.path": "C:/msys64/usr/bin/git-wrap.bat"
}

以上のようにするとVSCode上でTerminal -> New Terminalで開いたターミナルがMSYS2 MINGW64になる。

コンパイルと実行

コンパイルに必要なg++コマンドとかmakeコマンドとかが使えるようになっているはずなので後はプログラムを書くだけ。
一応、基本的なC++プログラムとそれをmakeするためのMakefileを書いておく。

hello_world.cpp
#include <iostream>
using namespace std;
int main() {
    cout << "Hello, World !" << endl;
    return 0;
}
Makefile
hello_world: hello_world.cpp
    g++ -o hello_world.exe hello_world.cpp
clean:
    rm hello_world.exe

上記2つのファイルを適当なディレクトリに保存して実行を行う。

コンパイルと実行
# g++コマンドを直接使う
$ g++ hello_world.cpp
$ ./a.exe
Hello, World !
$ rm ./a.exe

# makeコマンドを使ってみる
$ make
g++ -o hello_world.exe hello_world.cpp
$ ./hello_world.exe
Hello, World !
$ make clean
rm hello_world.exe

これで、とりあえずC++のプログラムをコンパイルして実行出来る環境が完成した。

(余談)コマンドプロンプトでgccを使いたい場合

MSYS2のターミナルでは予めMinGWのbinへPATHが通っている。
Windows10のコマンドプロンプトで使う意にはWindows10のPATHにMinGWのbinを追記する必要が有る。
イメージ的には、入力されたコマンドを探すフォルダを追加している感じ。

コマンドプロンプトを管理者権限で実行して以下のコマンドで環境変数PATHに追記する。
管理者権限モードで起動した場合は割と何でも出来てしまうので注意する。

間違えそうな人は普通にWindowsの設定-システム -> バージョン情報 -> システム情報 -> 設定の変更 -> 詳細設定 -> 環境変数(N)...からシステム環境変数Pathを編集して最後にC:\msys64\mingw64\binC:\msys64\usr\binを追加しても良い。

cmd.exe(Administrator)
$ setx /M PATH "%PATH%;C:\msys64\mingw64\bin;C:\msys64\usr\bin"

(余談)MSYS2とMINGW64とMINGW32の違い

gccにMSYS版とMINGW64版が有るが違いがよく分からなかったが参考文献によると以下のためらしい。

MSYS2とMinGW64の最大の違いは、POSIXエミュレーションを介しているか否か。
--- MSYS2,MinGW64,Cygwinの違い

MSYS2とMINGW64でターミナルが2種類用意されてるのはそんなに違いは無くて、MINGW64ではC:\mingw64\binにパスが通っているだけ。

参考文献

MSYS2 MinGW GCC環境をつくる(その1)
Visual Studio Code 15.1の統合シェルをMSYS2のbashにする
[FYI] Using git on msys2 #4651
msys2での$HOMEとOpenSSHでのホームディレクトリの違い
Windows10でシンボリックリンクを設定する方法
MSYS2,MinGW64,Cygwinの違い

11
22
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
11
22