初歩的なとこで突っかかったのでメモ程度に。
本記事ではVisual StudioのプラグインであるVisual C++ for Linux Developmentに最近追加された機能を紹介します。
まずVisual C++ for Linux Developmentとは何かという話ですが、これは名前の通りVisual StudioでLinux向け開発をサポートするプラグインです。
プラグイン自体は以前から公開されていて、クロスコンパイルに関する方法の解説記事が上がっていたりします。
さて。ここからが本題ですが、2016年8月19日に同プラグインではMakefileプロジェクトが新たにサポートされました。
Makefileプロジェクトではクロスコンパイルではなくリモートマシン上でビルドを行えるため、たとえば
手元に今までLinux上で開発、コンパイル、デバッグしていたコードがあるけど、本当は編集とデバッグはVisual Studioでやりたい…
といったシチュエーションに対してMakefileプロジェクトは効果的な解決策と言えます。
そこで本記事では実際にMakefileプロジェクトの作成からデバッグ実行までの流れを追ってみます。手元の動作確認環境は以下の通り。
- 開発機: Windows 10 Home 64bit / Visual Studio 2015 Community
- Linux: VMWare Player上で動いてるUbuntu 16.04LTS 64bit
最初はクロスコンパイルを通してみる
最初にプラグインのインストールやLinux機への接続など基本的な手順を試すため、Visual C++ for linux Development を軽く使ってみた等を参考にクロスコンパイルが通ることまで確認します。
ちなみに上記記事に沿って作業を進めていく中で接続先Linuxの設定をする手順がありますが、接続先の設定は後から「ツール>オプション>Cross Platform
」で変更することができます。
Makefileプロジェクト作成からデバッグ実行まで
クロスコンパイルが通ることを確認したら本題のMakefileプロジェクトを試します。
まず新規ソリューションとして「他の言語>Visual C++>クロス プラットフォーム>Makefile Project(Linux)
」を選択して適当にプロジェクトを作成。
空のプロジェクトが作られるので最低限のmain.cpp
とMakefile
を追加。
//main.cpp #include <iostream> int main(void) { std::cout << "Hello\n"; return 0; }
#Makefile all: main.o g++ -o main main.o main.o: main.cpp g++ -c -g -O0 main.cpp clean: rm -f main main.o
ひとまずこれでビルドしてみるとビルド成功が表示されますがこれは実際にはビルドできてません。
出力を見るとビルドコマンドが未設定だから何もしてないよという主旨のことが書かれています。
つまり現状ではソースをリモートマシンに投げつけただけで処理が終わっています。そこで「プロジェクト>(プロジェクト名)のプロパティ>Remote Build
」を選択し、ビルドコマンドや出力先ファイルを設定します。
これでビルドすると今度はビルドに失敗します。なんでや!
予想外の展開に社畜ちゃんも固まってますが、ここで焦ってはいけません。私はMakefileについてはほぼ素人なので、単純にMakefileを書き間違えたのかもしれません。
問題を切り分けるため、いったんリモートマシン側でプロジェクトディレクトリに行って現場を覗いてみます。リモートのプロジェクトディレクトリはデフォルトでは(ホームディレクトリ)/projects/(プロジェクト名)/
です。
普通に動いてますね…。
ソース自体は問題ないとなればVisual Studio上での設定が不足していることになります。ここで直感としてリモートマシンの作業ディレクトリ設定が不足しているのでは?という疑問が浮かんだため、ビルドコマンドにpwd
を追加してみます。
結果がこちら。
作業ディレクトリはリモートマシン側のプロジェクトディレクトリではなく/home/(ユーザ名)
つまりただのホームディレクトリでした。これではビルドできるハズがないためビルドコマンドを修正します。
プロジェクトディレクトリの書き方については「プロジェクト>(プロジェクト名)のプロパティ>Remote Settings>Remote Project Directory
」からコピペすればOK。
これでブレークポイントを設定して実行したところ、ようやく動きました。
まとめ
トラップが多かった気もしますが、設定さえきちんとすればリモートビルド+デバッグが出来ることが確認できました。Makefileプロジェクトは公開して間も無い機能ですから、たぶん今後はもっと便利になるんじゃないかなーと思います。