WGGの活動log

ゲームクリエイターやらエンジニアを目指してる大学生が,技術的なことを書いたり遊んだゲームの感想を書いたりするブログです.ちなみにWGGは「ワグ」と読みます.

Visual Studio Code で DxLibの開発をする

最近Unityで複数のゲームを開発してVSCodeがちょっと好きになりました.

今までよく使っていたVisual Studio + DxLib の開発環境ですが,Visual Studio が非常に重いので,VSCode で完結できないか試してみました.

できたもの

こんな感じに,VSCodeからコンパイルして,動作確認するまでできました
デバッグに関してはまだ試していないですが...

手順

大体↓の順序です

  1. VSCodeのインストール
    1. C++用の拡張機能を追加する
  2. Visual Studio のインストール
  3. batファイル, makeファイルの記述
    1. (必要なら)文字コード問題の解消
  4. プログラムを書く
  5. VSCodeからコンパイルする

1:VSCodeのインストール

↓ からダウンロードできます.
code.visualstudio.com

C++用の拡張機能を追加する

ここVSCodeの仕様がいまいちわかっていなくて合ってるのかわからないのですが, "C/C++" ってのと,"C++ Intellisense"ってのを入れました.
f:id:wgg00sh:20170920225000p:plain

Visual Studio のインストール

やり方は複数あると思いますが,今回は既に入ってたVS2015 を利用します
この辺を参考にして,とりあえずVSでDxLibの開発ができるようにします.

batファイル, makeファイルの記述

VSCodeからコンパイルするためのbatファイルおよび,makefileを作成します.

dxlibmake.bat
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"
nmake -f dxlib.mak


VsDevCmd.batはVisualStudioに付属している開発者用のコマンドプロンプトです
自分の場合パスは上記の通りでしたが,バージョンやインストールの方法によって変わるかもしれません.

dxlib.mak

こちらを参考にしました

TARGETDIR=src
TARGETNAME=*

C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT  /I "C:\DxLib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 /source-charset:utf-8

LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:"C:\DxLib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"

ALL:
  cl $(C_FLAGS) $(TARGETDIR)/$(TARGETNAME).cpp
  link /out:dxlib.exe $(LINK_FLAGS) $(TARGETNAME).obj
  dxlib.exe

実行ディレクトリ内の,srcディレクトリ直下に置いた.cppファイル全てをコンパイル対象とします.
ファイルの構成次第で自由に変えるべきかと思います.

"C:\DxLib" には,ここでいう「プロジェクトに追加すべきファイル_VC用」パスを渡しています.日本語パスが心配だったのでDxLibとリネームしました.

(必要なら)文字コード問題の解消

DxLibでプログラムを書く場合,DxLib.hを含めて基本的に全てShift-JISで書かれるのですが,UTF-8の方が良い場合には,4行目の /source-charset:utf-8 を記述する必要があります.
これをつけずにUTF-8ソースコードを書くと,コメントなどに日本語が含まれている場合に正常にコンパイルできない可能性があります.
また,UTF-8で指定する場合は,DxLibのヘッダファイル5つを全てUTF-8に直しておかないと,同様に大量の警告が表示されます.

プログラムを書く

とりあえずDxLibのHPに載っているサンプルコードを,見やすいように少しだけ書き換えたものを使います.

#include "./DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE);

	if( DxLib_Init() == -1 )
	{
		return -1 ;	
	}
	
	// DrawPixel( 320 , 240 , GetColor( 255,255,255 ) ) ;	// 見辛い
	DrawCircle(320,240,0xffffff,TRUE);

	WaitKey() ;	

	DxLib_End() ;

	return 0 ;
}

VSCodeからコンパイルする

VSCodeから,プロジェクトとするフォルダを開きます.
Ctrl+Shift+Bでタスクを実行できるのですが,プロジェクト内の.vscodeディレクトリにタスクが登録されていないので,「タスクランナーの構成」→「Others」の順にクリックします
task.jsonが作成されるので,commandの内容を,先ほど作成したdxlibmake.batに変更します

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "0.1.0",
  "command": "dxlibmakebat",
  "isShellCommand": true,
  "args": ["Hello World"],
  "showOutput": "always"
}

これでプロジェクトフォルダ内のdxlibmake.batが実行され,makefileが処理されます.
f:id:wgg00sh:20170920234617p:plain

あとは設定が正しければ正常にコンパイルされ,DxLibのウィンドウが開きます

完成

というわけで,VSCodeからDxLibのコンパイルをしてみました.
もしDxLibを使っていて,Visual Studioが重いと感じてらっしゃる方がいましたら,是非参考にしてみてください