Visual C ++とOpen FolderでMinGWとCygwinを使用する

WindowsMinGWを使用する理由は3つあります。1つは、コンパイラの互換性です。現実には、GCCを使って構築される予定のコードベースがあります。これは、多くのクロスプラットフォームプロジェクトで特に当てはまります。MSVCをサポートするためにこれらのコードベースを移植することは、あなたがしたいことがあなたのコードで起動して実行しているときには、コストのかかる作業になります。MinGWを使用すると、数日ではなく数分で稼動させることができます。

しかし、GCCとのソース互換性よりもMinGWを使用する魅力的な理由があります。MinGW環境は単なるコンパイラではなく、POSIXビルド環境全体を含みます。これらの開発環境では、クロスプラットフォームプロジェクトをWindows上に構築することができ、ビルドロジックを変更することはほとんどありません。MakeまたはAutoTools が必要です。既にインストールされています.MSYS2のような環境を使用している場合は、ほぼすべてのツールが単一のパッケージ管理コマンドにすぎません。

最後に、MSYS2などのMinGWディストリビューションでは、Win32にコードを移植することなく、Windows上にネイティブPOSIXソフトウェアを構築することができます。これは、ネイティブのPOSIXツールをWindows上で実行できるようにするエミュレーションレイヤーによって実現されます。これと同じ層は、お気に入りのPOSIXビルドツールをすべてMinGW環境で実行できるようにするものです。

WindowsMinGWをインストールする

最新のVisual Studio PreviewをインストールするとMinGWの使い方は簡単です。まず、Visual StudioをインストールするときにC ++ワークロードを選択する必要があります。次に、MinGW自体をダウンロードする必要があります。実際にはMinGWをインストールする方法はたくさんあります。特に冒険している人は、ソースからビルドすることはできますが、一般的なバイナリディストリビューションをインストールする方がはるかに簡単です。より一般的なディストリビューションの1つは、MSYS2Getting Started Guide)です。標準のMSYS2インストールでは、32ビットおよび64ビットWindowsをネイティブにターゲットとするPOSIXビルド環境と、WindowsをターゲットとするPOSIXソフトウェアをビルドするためのエミュレーション層の3つのビルド環境がインストールされます。

あなたが作業している特定のプロジェクトを念頭に置いている場合は、MinGWのインストール方法に関するプロジェクト固有の指示があるかどうかチェックする価値もあります。一部のプロジェクトには、独自のカスタム調整されたMinGWディストリビューションも含まれています。

Visual StudioMinGWを使用する

すでにVisual StudioプロジェクトGCCベースのコンパイラ使用することはできましたが、Windows上でMinGWを使用して構築される多くのクロスプラットフォームプロジェクトは、ソリューションおよびVisual C ++プロジェクトファイルに編成されません。現実のプロジェクトのためにこれらの資産を作成するには、時間がかかることがあります。Visual Studioへのオンボードクロスプラットフォームプロジェクトを合理化するため、フォルダを直接開くことができるようになりました。最新のプレビューでは、MinGWなどの代替コンパイラやビルド環境を使用するのが以前より簡単になりました。

"Open Folder"を使用すると、完全なIntelliSenseでコードを編集し、完全なSolutionおよびC ++プロジェクトファイルと同じ忠実度でビルドおよびデバッグすることができます。しかし、何百行ものXMLをオーサリングするのではなく、少量のJSONを書くだけで済みます。さらに、必要な機能にJSONを記述するだけで済みます。たとえば、IDEでコードを編集し、それ以外のコマンドライン固執する場合は、数行のJSONを記述してIntelliSenseを有効にするだけです。

正確なIntelliSenseで編集する

"Open Folder"を使用してIntelliSenseを最大限に活用するには、CppProperties.jsonファイルを作成する必要があります。このファイルはメインメニューから "Project-> Edit Settings-> CppProperties.json ..."を選択して作成できます。

CppProperties.jsonを作成する

このファイルには、x86およびx64アーキテクチャーの「デバッグ」と「リリース」の4つの構成が自動的に取り込まれます。これらの設定をすべて必要としない場合は、それらを削除して混乱を減らすことができます。次に、MinGWビルドと一貫性のあるIntelliSenseを取得するためのいくつかのオプションを設定する必要があります。

各設定では、「intelliSenseMode」キーが表示されます。MinGWや他のGCCベースのコンパイラでは、アーキテクチャに応じてこれを "windows-clang-x86"または "windows-clang-x64"に設定する必要があります。

次に、プロジェクトのインクルードパスを追加する必要があります。構成固有のインクルードパスは、各構成の下の「includePath」アレイに追加できます。ここでもプロジェクト全体のインクルードパスを追加することができますが、 "環境"ブロックを "設定"のピアとして設定ファイルに追加することで、それらを "INCLUDE"環境変数に追加する方が簡単かもしれません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"environments": [
  {
    "MINGW_PREFIX": "C:/msys64/mingw64",
    "MINGW_CHOST ": "x86_64-w64-mingw32",
    "MINGW_PACKAGE_PREFIX": "mingw-w64-x86_64",
    "MSYSTEM": "MINGW64",
    "MSYSTEM_CARCH": "x64_64",
    "MSYSTEM_PREFIX": "${env.MINGW_PREFIX}",
    "SHELL": "${env.MINGW_PREFIX}/../usr/bin/bash",
    "TEMP": "${env.MINGW_PREFIX}/../tmp",
    "TMP": "${env.TEMP}",
    "PATH": "${env.MINGW_PREFIX}/bin;${env.MINGW_PREFIX}/../usr/local/bin;${env.MINGW_PREFIX}/../usr/bin;${env.PATH}",
    "INCLUDE": "project/lib/includes;${env.MINGW_PREFIX}/mingw/includes"
  }
],

注:MINGW_PREFIXはあなたのMinGWのインストールを指していなければなりません、MSYS2をデフォルト設定でインストールした場合、このディレクトリは "C:/ msys64 / mingw64"になります。

MinGWを含むほとんどのGCCベースのコンパイラは、自動的に特定のシステムヘッダディレクトリを含みます。完全なIntelliSenseの場合、これらをインクルードパスリストに追加する必要があります。以下のコマンドを実行することで、これらの標準インクルードのリストを得ることができます:

1
echo | gcc -Wp,-v -x c++ - -fsyntax-only

MinGWでビルドする

IntelliSense( "MINGW_PREFIX"とそれに関連する環境変数を定義して "PATH"に追加)を設定すると、MinGWを使用した構築は非常に簡単です。まず、ビルドタスクを作成する必要があります。ビルドスクリプト(またはタスクに関連付ける他のファイル)を右クリックし、[タスクの設定]を選択します。

タスクの設定

これにより、まだ "tasks.vs.json"ファイルが作成されていない場合は、スタブを作成します。MinGWとそのツールはCppProperties.jsonで設定されているPATH上にあるので、以下のようにそれらを使用するようにタスクを設定することができます:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "version": "0.2.1",
  "tasks": [
    {
      "taskName": "build-all",
      "appliesTo": "hello.cpp",
      "contextType": "build",
      "type": "launch",
      "command": "${env.comspec}",
      "args": [
        "g++ -o bin/helloworld.exe -g hello.cpp"
      ]
    }
  ]
}

この例はシンプルで1つのファイルしかビルドしませんが、MakeやMinGWでサポートされている他のビルドツールを呼び出すことができます。このファイルを保存したら、 "appliedTo"タグに一致するすべてのファイルに対して "Build"オプションを使用できるようにする必要があります。

コンテキストメニューから「ビルド」を選択すると、コマンドが実行され、コンソール出力が出力ウィンドウにストリーミングされます。

MinGWアプリケーションをデバッグする

ビルドするようにプロジェクトを設定したら、テンプレートを選択してデバッグを設定することができます。実行可能ファイルを作成したら、フォルダビューでそのファイルを探し、ソリューションエクスプローラの実行可能ファイルのコンテキストメニューから「デバッグと起動の設定」を選択します。

デバッグと起動の設定

これにより、この実行可能ファイル用のデバッガテンプレートを選択できます。

デバッガの選択

これにより、デバッガを設定する "launch.vs.json"ファイルにエントリが作成されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "cppdbg",
      "name": "helloworld.exe",
      "project": "bin\\helloworld.exe",
      "cwd": "${workspaceRoot}",
      "program": "${debugInfo.target}",
      "MIMode": "gdb",
      "miDebuggerPath": "${env.MINGW_PREFIX}\\bin\\gdb.exe",
      "externalConsole": true
    }
  ]
}

ほとんどの場合、 "CppProperties.json"ファイルに "MINGW_PREFIX"を定義していれば、これをまったく変更する必要はありません。これで、コードの編集、ビルド、デバッグの準備が整いました。実行可能ファイルを右クリックし、コンテキストメニューで[デバッグ]を選択するか、デバッグドロップダウンメニューで新しく追加された起動設定を選択してF5を使用できます。ブレークポイントや、ローカル、ウォッチ、オートWindowsなどのデバッグ機能を使用できるようにする必要があります。ブレークポイントの設定に問題がある場合は、ビルドコマンドがGDB互換のシンボルとデバッグ情報を出力するように設定されていることを確認してください。

最後に、完全な内部ループを完成させるために、 "task.vs.json"のビルドタスクに "output"タグを追加することができます。例えば:

1
"output": "${workspaceRoot}\\bin\\helloworld.exe",

GCCファミリのCygwinとその他のコンパイラについて

私たちは、特にこの記事でのMinGWを議論してきたが、それは、上記コンテンツの非常に少ないが、MinGWのに特異的であることを心に留めておく価値があります。これらのトピックは、GDBデバッグできるバイナリを生成できる限り、Cygwinとクランのように他のコンパイラやビルド環境にも同様に適用されます。OpenFolderは、将来的には、コンパイラやデバッガの一層の多様性をサポートするでしょう。

引用元:

blogs.msdn.microsoft.com