Visual Studio 2017 の Linux C++ 開発機能

More than 1 year has passed since last update.

R2.0 2018-03-07 更新

- 日本語を使う場合の問題点。

- Linux 側でのプロジェクトの場所


はじめに

Visual Studio 2017 がついにリリースされました。面白そうな機能が満載ですが、その中でもクロスプラットフォーム関連は興味のあるところです。ということで、Linux C++ 開発機能を試してみました。


プロジェクトの作成

ファイルメニューから新しいプロジェクトを選んで表示されたダイアログで、Visual C++ を選ぶ。さらにクロスプラットフォームを展開して Linux を選ぶ。以下の例では「コンソールアプリケーション」を選択した。

NewProject.png

Fig.1 新しいプロジェクト

名前とソリューション名を適切なものに変更してOKボタンをクリックするとプロジェクトが作成される。

main.cpp が作成されるので中身を見てみると次のような感じになる。

#include <cstdio>


int main()
{
printf("hello from Console1!\n");
return 0;
}


実行とデバッグ

まず、ツールバーが次のイメージのようになっていることを確認する。なっていないときはそのように変更する。


RemoteDebugger.png

Fig.2 ツールバーの設定

「リモートGDBデバッガー」をクリックすると、最初だけ下のようなダイアログが開くので、Linux への接続内容を入力する。このダイアログは「ツール/オプション/Cross Platform」からでも開くことができる。

Connection.png

Fig.3 Linux への接続設定

設定が終わるとビルドが行われて成功するとデバッガが起動されてデバッグが可能になる。

Debugging.png

Fig.4 デバッグ中の画面

実行結果は「デバッグ / Linux Console」メニューから Linux Console を開いて確認できる。

LinuxConsole2.png

Fig.5 デバッグコンソール画面

もう少し、プログラムらしいサンプルを以下に示す。これは常用対数の値を表示するものである。

#include <iostream>

#include <cmath>

using namespace std;

int main()
{
cout << "Linux C++ test" << endl;
double x = 1.0;
double y;

while (x <= 10.0) {
y = log10(x);
cout << "log10(" << x << ") = " << y << endl;
x += 1.0;
}
return 0;
}

LinuxConsole.png

Fig.6 サンプルを実行したときのデバッグコンソール


詳しい設定などについて

実行環境などの詳細な設定などについては、プロジェクトフォルダ内の readme / readme.html を参照するとよい。


Linux 上での実行

Linux 側のホームディレクトリ (ユーザ名が user なら /home/user) に projects というフォルダが作成されて、その中にプロジェクトフォルダが作成される。そのフォルダをたどっていくと、実行ファイルができているのでそれを実行すると確かに正しく動作することを確認できる。

ProjectsOnLinux.png

Fig.7 Linux での実行例


日本語を使う場合の問題点

日本語を使った場合、文字化けが起こってしまいました。(例えば、下記のソース)

#include <vector>

#include <string>
#include <iostream>

using namespace std;

//
// Console2: vector テスト
// =======================
// 日本語を使うときは、UTF-8 で保存すること。
int main()
{
printf("Console2 : vector test!\n");

vector<string> foods = { "パン", "チョコレート", "飴" };

for (auto it = foods.begin(); it != foods.end(); it++)
{
cout << it->data() << endl;
}

return 0;
}

Mojibake.jpg

Fig.8 実行例 (文字化けしたときとしないとき)

これは、このソースが Shift_JIS で保存されるため (Linux 側も) です。デフォルトで UTF-8 で保存できればいいのですが、オプションやプロジェクトのプロパティを探しても見つからなかったので、外部エディタで UTF-8 で保存しなおし(Windows 側) ビルドすると文字化けしなくなりました。


Linux 側でのプロジェクトの場所

Linux 側のプロジェクトの場所はユーザ名が user 、プロジェクト名が ConsoleApp1なら

 /home/user/projects/ConsoleApp1

などとなります。実行ファイルは、

 /home/user/projects/ConsoleApp1/bin/x64/Release/ConsoleApp1.out

のように作成されます。

これは、プロジェクトのプロパティで容易に変更できます。

/