Edited at

Windows で Rust の開発環境を構築 ~Visual Studio Code編~

More than 1 year has passed since last update.


はじめに

この記事は


  • Windows で Rust を使ってプログラミングをしたい

  • Rust のデバッグ実行が出来る開発環境を整えたい

という人を対象にした、忘却録的な記事です(・∀・)。

開発環境には Visual Studio Code を使用します(・∀・)。

Rust 自体が割りとマニアックなプログラミング言語なうえ、Windows 向けの情報がネット上に少ないようなので書いておけば誰かの役に立つかもしれないと思って書いておきます(・∀・)。


開発環境構築に必要なもの


  • Windows 10 Pro x64

  • rustup-init(これ

  • GDB 7.9.1 x64(これ

  • Visual Studio Code(ここ

たぶん Windows 7 以降なら問題ないと思いますが、検証していません(・∀・)。

また、32ビット版は検証していません(・∀・)。


手順


全体の手順



  1. rustup-init.exe を起動

  2. コマンドプロンプトが起動するので ( 2 ) を選択する


  3. default host triplex86_64-pc-windows-gnu を入力、default toolchainmodify PATH variable はデフォルトの stable / yes を選択する(Enter でデフォルト)

  4. GDB を展開して C:\Program Files\gdb-7.9.1-tdm64-2 にコピー

  5. PATH に C:\Program Files\gdb-7.9.1-tdm64-2\bin を追加

  6. Visual Studio Code を起動して Ctrl+Shift+X を押し、左のペインに拡張機能が出るので Rusty Code を入力して Rusty Code をインストール

  7. 再び 拡張機能ペインNative Debug を入力して Native Debug をインストール

これで開発環境は整います(・∀・)。


各プロジェクトごとの手順


  1. 任意のディレクトリでコマンドラインから cargo new hello –-bin を実行してプロジェクトを作成する(hello はプロジェクト名)

  2. Visual Studio Code から作成したプロジェクトのディレクトリを開く(「ファイル」→「フォルダを開く」)


  3. Ctrl+Shift+D を押してデバッグペインを開く

  4. 歯車の設定マークを押して GDB を選択する


  5. launce.json と言う設定ファイルが開かれるので "target": の設定値を "target/debug/hello" に変更して保存する(.exe は不要、hello はプロジェクト名)

  6. Visual Studio Code のエクスプローラーペインから main.rs を開く


  7. Ctrl+Shift+P を押して Build Debug を選択してデバッグビルドをする

  8. main.rs の好きな場所にブレークポイントを設定する(行数が出ている左側の部分をクリックするとブレークポイントに赤い丸が付きます)


  9. Ctrl+Shift+D をデバッグペインを表示して三角の実行ボタンを押す

  10. ビルドしたアプリがデバッグ実行されて、ブレークポイントでストップすれば成功

ファイルを編集したら保存するのを忘れずに(・∀・)。

それでは、良き Rust ライフを(・∀・)。


その他

Visual Studio Code でビルドする時に Cargo が上手く動かない場合があります(・∀・)。

その場合、Visual Studio Code の右下の方の文字コード種別の右側あたりに Rust Tools Install を出ていることがありますので、それをクリックして必要なものをインストールすると動くようです(・∀・)。


おまけ

Rust から Win32API を呼び出してメッセージボックスを表示するサンプル(・∀・)。

意外と Win32API を使用する例が無いようなので(・∀・)。


main.rs

#![no_main]

extern crate winapi;
extern crate user32;

use std::ffi::OsStr;
use std::iter::once;
use std::os::raw::{c_char, c_int, c_void};
use std::os::windows::ffi::OsStrExt;
use std::ptr::null_mut;

#[allow(non_snake_case)]
#[no_mangle]
pub extern "system" fn WinMain(_ : *const c_void, _ : *const c_void, _ : *const c_char, _ : c_int) -> c_int {
let title = text("Title");
let message = text("Hello, World!");

unsafe {
user32::MessageBoxW(null_mut(), message.as_ptr(), title.as_ptr(), winapi::MB_OK);
}

0
}

fn text(text: &str) -> Vec<u16> {
return OsStr::new(text).encode_wide().chain(once(0)).collect::<Vec<u16>>();
}


Cargo.toml の中身は以下の感じ(・∀・)。

[package]

name = "hello"
version = "0.0.1"

[dependencies]
winapi = "*"
user32-sys = "*"

追記(2017/12/01):

なんか警告が出る問題を修正(・∀・)。