Visual Studio C と C++ の開発は、Windows だけではありません。 このチュートリアルでは、Windows および Linux での C++ クロス プラットフォーム開発に Visual Studio を使用する方法について説明します。 これは CMake に基づいているため、Visual Studio プロジェクトを作成または生成する必要はありません。 CMakeLists.txt ファイルを含むフォルダーを開くと、Visual Studio によって IntelliSense とビルド設定が自動的に構成されます。 Windows でコードの編集、ビルド、デバッグをすばやくローカルで開始できます。 次に、構成を切り替えて、すべて Visual Studio 内から Linux 上で同じ操作を行います。
このチュートリアルでは、以下の内容を学習します。
- GitHub からオープンソースの CMake プロジェクトを複製する
- Visual Studio でプロジェクトを開く
- Windows で実行可能ターゲットをビルドしてデバッグする
- Linux マシンに接続を追加する
- Linux で同じターゲットをビルドしてデバッグする
[前提条件]
クロス プラットフォーム C++ 開発用に Visual Studio を設定する
- まず、 Visual Studio をインストール し、 C++ および C++ ワークロードを使用 した Linux 開発によるデスクトップ開発を選択します。 この最小インストールは 3 GB のみです。 ダウンロード速度によっては、インストールに 10 分以上かかることはありません。
クロス プラットフォーム C++ 開発用の Linux マシンを設定する
Visual Studio では、Linux の特定のディストリビューションは必要ありません。 OS は、物理マシン、VM、またはクラウドで実行できます。 Windows Subsystem for Linux (WSL) を使用することもできます。 ただし、このチュートリアルでは、グラフィカル環境が必要です。 WSL は主にコマンド ライン操作を目的としているため、ここではお勧めしません。
Visual Studio には、Linux コンピューター上の次のツールが必要です。C++ コンパイラ、
gdb
、ssh
、rsync
、make
、zip
。 Debian ベースのシステムでは、次のコマンドを使用して、次の依存関係をインストールできます。sudo apt install -y openssh-server build-essential gdb rsync make zip
Visual Studio には、サーバー モードが有効になっている Linux マシン上の最新バージョンの CMake が必要です (少なくとも 3.8)。 Microsoft は、任意の Linux ディストリビューションにインストールできる CMake のユニバーサル ビルドを生成します。 このビルドを使用して、最新の機能があることを確認することをお勧めします。 CMake バイナリは、GitHub の CMake リポジトリの Microsoft フォーク から取得できます。 そのページに移動し、Linux マシン上のシステム アーキテクチャに一致するバージョンをダウンロードし、実行可能ファイルとしてマークします。
wget <path to binary> chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
--help
を使用してスクリプトを実行するためのオプションを確認できます。-prefix
は Visual Studio が CMake を検索する既定の場所であるため、 オプションを使用して /usr パスへのインストールを指定することをお勧めします。 次の例は、Linux x86_64 スクリプトを示しています。 別のターゲット プラットフォームを使用している場合は、必要に応じて変更します。sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
Windows マシンにインストールされている Windows 用の Git。
GitHub アカウント。
GitHub からオープンソースの CMake プロジェクトを複製する
このチュートリアルでは、GitHub の Bullet Physics SDK を使用します。 これは、多くのアプリケーションに衝突検出と物理シミュレーションを提供します。 SDK には、他のコードを記述しなくてもコンパイルして実行するサンプルの実行可能プログラムが含まれています。 このチュートリアルでは、ソース コードやビルド スクリプトは変更しません。 開始するには、Visual Studio がインストールされているコンピューター上の GitHub から bullet3 リポジトリを複製します。
git clone https://github.com/bulletphysics/bullet3.git
Visual Studio のメイン メニューで、[ ファイル] > [CMake > 開く] を選択します。 ダウンロードした bullet3 リポジトリのルートにある
CMakeLists.txt
ファイルに移動します。フォルダーを開くとすぐに、 ソリューション エクスプローラーにフォルダー構造が表示されるようになります。
このビューには、論理ビューやフィルター処理されたビューではなく、ディスク上の内容が正確に表示されます。 既定では、非表示のファイルは表示されません。
フォルダー内 のすべてのファイル を表示するには、[すべてのファイルを表示] ボタンを選択します。
ターゲット ビューに切り替える
CMake を使用するフォルダーを開くと、Visual Studio によって CMake キャッシュが自動的に生成されます。 プロジェクトのサイズによっては、この操作にしばらく時間がかかる場合があります。
[出力] ウィンドウで、[出力の表示] を選択し、[CMake] を選択してキャッシュ生成プロセスの状態を監視します。 操作が完了すると、"ターゲット情報の抽出が完了しました" と表示されます。
この操作が完了すると、IntelliSense が構成されます。 プロジェクトをビルドし、アプリケーションをデバッグできます。 Visual Studio では、CMakeLists ファイルで指定されたターゲットに基づいて、ソリューションの論理ビューが表示されるようになりました。
ソリューション エクスプローラーの [ソリューションとフォルダー] ボタンを使用して、CMake ターゲット ビューに切り替えます。
Bullet SDK のビューは次のようになります。
ターゲット ビューでは、このソース ベースの内容をより直感的に表示できます。 一部のターゲットはライブラリであり、他のターゲットは実行可能ファイルであることがわかります。
CMake ターゲット ビューでノードを展開すると、ソース コード ファイルがディスク上のどこにあっても表示されます。
明示的な Windows x64-Debug 構成を追加する
Visual Studio では、Windows 用の既定の x64 デバッグ 構成が作成されます。 構成は、CMake に使用するプラットフォーム ターゲットを Visual Studio が認識する方法です。 既定の構成はディスク上では表されません。 構成を明示的に追加すると、Visual Studio によってCMakeSettings.jsonという名前のファイルが作成 されます 。 指定したすべての構成の設定が設定されます。
新しい構成を追加します。 ツール バーの [構成] ドロップダウンを開き、[ 構成の管理] を選択します。
CMake 設定エディターが開きます。 エディターの左側にある緑色のプラス記号を選択して、新しい構成を追加します。 CMakeSettings への構成の追加ダイアログが表示されます。
このダイアログには、Visual Studio に含まれるすべての構成と、作成したカスタム構成が表示されます。 x64-Debug 構成を引き続き使用する場合は、最初に追加する必要があります。 [x64-Debug] を選択し、[選択] ボタンを選択します。 Visual Studio では、 x64-Debug の構成で CMakeSettings.json ファイルが作成され、ディスクに保存されます。 CMakeSettings.jsonで name パラメーターを直接変更することで、構成に任意の名前を使用できます。
Windows でブレークポイントの設定、ビルド、実行を行う
この手順では、Bullet Physics ライブラリを示すサンプル プログラムをデバッグします。
ソリューション エクスプローラーで、AppBasicExampleGui を選択して展開します。
ファイル
BasicExample.cpp
を開きます。実行中のアプリケーションをクリックしたときにヒットするブレークポイントを設定します。 click イベントは、ヘルパー クラス内のメソッドで処理されます。 簡単に入手するには:
構造体
CommonRigidBodyBase
の派生BasicExample
を選択します。 これは 30 行目あたりにあります。右クリックし、[ 定義に移動] を選択します。 これで、CommonRigidBodyBase.h というヘッダーが表示されます。
ソース上のブラウザービューで、あなたが
CommonRigidBodyBase
にいることが確認できます。 右側では、調べるメンバーを選択できます。 ドロップダウンを開き、mouseButtonCallback
を選択して、ヘッダー内のその関数の定義に移動します。
この関数内の最初の行にブレークポイントを配置します。 Visual Studio デバッガーで実行すると、アプリケーションのウィンドウ内でマウス ボタンをクリックするとヒットします。
アプリケーションを起動するには、ツール バーの起動ドロップダウンを選択します。 緑色の再生アイコンが表示されている "スタートアップ項目の選択" です。ドロップダウンで、[AppBasicExampleGui.exe] を選択します。 実行可能ファイル名が起動ボタンに表示されるようになりました。
起動ボタンを選択してアプリケーションと必要な依存関係をビルドし、Visual Studio デバッガーをアタッチして起動します。 しばらくすると、実行中のアプリケーションが表示されます。
マウスをアプリケーション ウィンドウに移動し、ボタンをクリックしてブレークポイントをトリガーします。 ブレークポイントによって Visual Studio がフォアグラウンドに戻り、エディターに実行が一時停止されている行が表示されます。 アプリケーション変数、オブジェクト、スレッド、メモリを調べたり、対話形式でコードをステップ実行したりできます。 [ 続行] を選択してアプリケーションを再開し、通常どおりに終了します。 または、停止ボタンを使用して Visual Studio 内で実行を停止します。
Linux 構成を追加してリモート コンピューターに接続する
Linux 構成を追加します。 ソリューション エクスプローラー ビューで CMakeSettings.json ファイルを右クリックし、[構成の追加] を選択します。 以前と同じ CMakeSettings への構成の追加ダイアログが表示されます。 今回 は [Linux デバッグ] を選択し、CMakeSettings.json ファイル (Ctrl + s) を保存します。
Visual Studio 2019 バージョン 16.6 以降 CMake 設定エディターの下部まで下にスクロールし、[ 詳細設定の表示] を選択します。 CMake ジェネレーターとして Unix Makefiles を選択し、CMakeSettings.json ファイルを保存します (Ctrl + s)。
[構成] ドロップダウンで [ Linux-Debug ] を選択します。
Linux システムに初めて接続する場合は、[ リモート システムへの接続 ] ダイアログが表示されます。
ダイアログには、ホスト名、ポート、ユーザー名、認証の種類、およびパスワードのフィールドがあります。 [ポート] が 22 に設定され、[認証の種類] が [パスワード] に設定されている場合を除き、すべてのフィールドは空白です。
リモート接続を既に追加している場合は、[ ツール] > [オプション] > クロス プラットフォーム > 接続マネージャーに移動して、このウィンドウを開くことができます。
Linux マシンへの接続情報を入力し、[接続] を選択します。 Visual Studio では、Linux-Debug の既定の接続としてマシンが CMakeSettings.json に追加されます。 また、リモート マシンからヘッダーが取得され、そのリモート接続に固有の IntelliSense を利用できます。 次に、Visual Studio によってリモート コンピューターにファイルが送信され、リモート システムに CMake キャッシュが生成されます。 ネットワークの速度とリモート コンピューターの電源によっては、これらの手順に時間がかかる場合があります。 CMake の出力ウィンドウに "ターゲット情報の抽出が完了しました" というメッセージが表示されたら、完了したことがわかります。
Linux でブレークポイントを設定し、ビルドして実行する
デスクトップ アプリケーションであるため、デバッグ構成にさらに構成情報を提供する必要があります。
CMake ターゲット ビューで、AppBasicExampleGui を右クリックし、[ デバッグと起動の設定] を選択して、非表示の .vs サブフォルダーにある launch.vs.json ファイルを開きます。 このファイルは、開発環境に対してローカルです。 チームでファイルをチェックインおよび保存したい場合は、プロジェクトのルートにそれを移動できます。 このファイルでは、AppBasicExampleGui の構成が追加されています。 これらの既定の設定はほとんどの場合機能しますが、ここでは機能しません。 デスクトップ アプリケーションであるため、Linux マシンでプログラムを表示できるように、プログラムを起動するための追加情報を提供する必要があります。
Linux マシンで
DISPLAY
環境変数の値を見つけるには、次のコマンドを実行します。echo $DISPLAY
AppBasicExampleGui の構成には、パラメーター配列 "pipeArgs" があります。 "${debuggerCommand}" という行が含まれています。 これは、リモート コンピューターで
gdb
を起動するコマンドです。 Visual Studio では、そのコマンドを実行する前に、このコンテキストに表示をエクスポートする必要があります。 たとえば、ディスプレイの値が:1
の場合は、次のようにその行を変更します。"export DISPLAY=:1;${debuggerCommand}",
アプリケーションを起動してデバッグします。 ツール バーの [ スタートアップ項目の選択] ドロップダウンを開き、[ AppBasicExampleGui] を選択します。 次に、ツールバーの緑色の再生アイコンを選択するか、 F5 キーを押します。 アプリケーションとその依存関係は、リモート Linux マシン上に構築され、Visual Studio デバッガーがアタッチされた状態で起動されます。 リモートの Linux マシンに、アプリケーション ウィンドウが表示されます。
マウスをアプリケーション ウィンドウに移動し、ボタンをクリックします。 ブレークポイントに到達しました。 プログラムの実行が一時停止し、Visual Studio がフォアグラウンドに戻り、ブレークポイントが表示されます。 Visual Studio に Linux コンソール ウィンドウも表示されます。 このウィンドウは、リモート Linux マシンからの出力を提供し、
stdin
の入力を受け入れることもできます。 他の Visual Studio ウィンドウと同様に、表示したい場所にドッキングできます。 その位置は、今後のセッションで保持されます。ウィンドウの出力は、dlopen/dlsym を使用して動的に読み込まれる C11 関数が OK であり、GL 3.0 コンテキストが作成され、Direct GLX レンダリング コンテキストが取得され、最新の状態にされたことを示します。 ウィンドウには、GL_VENDOR、GL_VERSION、GL_SHADING_LANGUAGE_VERSIONなどのさまざまなバージョン情報があります。
Visual Studio を使用して、アプリケーション変数、オブジェクト、スレッド、メモリを検査し、対話形式でコードをステップ実行できます。 ただし、今回は、ローカルの Windows 環境ではなく、リモートの Linux マシンですべて実行します。 [続行] を選択すると、アプリケーションが正常に再開および終了するか、ローカル実行と同様に停止ボタンを選択できます。
[呼び出し履歴] ウィンドウを確認し、Visual Studio が Linux でアプリケーションを起動して以来の
x11OpenGLWindow
への呼び出しを確認します。コールスタックには、CommonRigidBodyBase::mouseMoveCallback のブレークポイントと、その前にある呼び出し(たとえば、OnMouseMove や X11OpenGLWindow::pumpMessage など)が表示されます。
学習した内容
このチュートリアルでは、GitHub から直接コード ベースを複製しました。 Windows でビルド、実行、デバッグを行いました。変更は必要ありません。 その後、同じコード ベースを使用して、リモート Linux マシンでビルド、実行、デバッグを行いました。
次のステップ
Visual Studio での CMake プロジェクトの構成とデバッグの詳細については、以下を参照してください。