Windows
clang
VisualStudio
LLVM

Visual Studioの設定について

More than 1 year has passed since last update.

2015までのVisual Studio Express for Desktopを対象にした古い記事です。


  • 従来のWindowsデスクトップを対象としたC++単体のインストール

  • 構成マネージャで追加しなくても初期状態でx64が選択可能

  • 内臓のリソースエディタが使える

  • オプションでClangのインストールが出来る

以上の点からCommunity 2017への移行をオススメします。


Visual C++のプロジェクトをx64用に設定する

メニューから[ファイル]>[新しいプロジェクト]を選択し、[新しいプロジェクト]ダイアログを開きます。

Win32用のプロジェクトしか無いので[Win32 プロジェクト]を選択します。

新しいプロジェクト

[アプリケーション ウィザード]にもx64用の設定は無いので、必要な項目を設定したらそのまま完了を選択してダイアログを閉じます。

Win32 アプリケーション ウィザード

標準ツールバーのリストボックスか、メニューの[ビルド]内から[構成マネージャー]を選択します。

ソリューション プラットフォーム

[アクティブ ソリューション プラットフォーム]のリストから<新規作成...>を選択します。

構成マネージャー

[新しいプラットフォームを入力または選択してください]にx64

[設定のコピー元]にWin32

[新しいプロジェクト プラットフォームを作成する]にチェックが入っているのを確認したらOKを選択

新しいソリューション プラットフォーム

標準ツールバーのリストボックスに[x64]が追加されているので、後はx64を選択した状態でビルドすればOKです。

ソリューション プラットフォーム

ビルド後、タスク マネージャーを確認して見て下さい。

64bitでビルドした場合、実行ファイルの右にある(32 ビット)の表記が消えているはずです。

タスク マネージャー


Visual Studio Expressにリソースエディタを追加する

Visual Studio Expressでは単体でリソースの編集が出来ないので、外部のリソースエディタを追加します。

まず、ResEdit Home Page(注:2017/01/05現在、ファイルのリンク先がインストーラを装った悪質なEXEファイルへと改ざんされている模様)からResEditのアーカイブをダウンロードして任意のフォルダに解凍します

ResEdit 1.6.6のファイルへの直リンク

* ResEdit-win32.7z (SHA256: 0512802BDA328DDFF71B7B7E7C1C9C029AE9D6F5325D94D8E627ED34A8CD0A88)

* ResEdit-x64.7z (SHA256: 7AC156280B43917AA2D4B9B6768B6E97C275C87E2B82624A81B64CB99110949F)

ResEdit.exeを実行すると新規プロジェクトのウィザードが表示されるのでキャンセルします

Wizard

キーボードで[Ctrl+P]を押すか、メニューから[Option]>[Preferences...]を選択して設定画面を出します。

[General]>[Language]でリストから[Japanese]を選択してOKをクリックします。

メッセージボックスに「You have to restart ResEdit for the changes to take effect」と表示されるので一旦再起動します。

Preferences

再起動したらメニュー等が日本語化されているので再度[オプション]>[設定...]で設定画面を開いて、今度は[全般]のINCLUDEパスでWindows SDKの場所を指定します。

設定画面の下の方にWindows SDKのダウンロードリンクがありますが、Visual Studioがインストールされていれば

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\IncludeにWindows SDKがインストールされているはずなのでそちらを使います。

[Check includes on startup]にチェックを入れておけば、起動時にパスの設定があっているかチェックしてくれるので、チェックを入れてOKをクリックしResEditを再起動します。

メッセージボックスに「No include paths are configured. Do you want to configure include path now?」と表示された場合はパスが間違っているので再度設定しなおして下さい。

メッセージボックスが表示されなければResEditの基本的な設定は完了です。

Includeパス

ResEditの設定が完了したら今度はVisual Studioの[ソリューション エクスプローラー]で.rcファイルをダブルクリックした時に、

リソース ビューに「リソースの編集は Visual C++ Express SKU でサポートされていません。」と表示されるのをResEditが起動するように変更します。

リソース ビュー

[ソリューション エクスプローラ]の中から.rcファイルを探してコンテキストメニューを開き、[ファイルを開くアプリケーションの選択...]をクリックします。

ソリューション エクスプローラ

設定画面が表示されたら[追加...]をクリックして[プログラムの追加]ダイアログを開き、

プログラムにResEditへのパス、表示名にResEditと入力してOKをクリック

ファイルを開くアプリケーションの選択

ResEditが追加されたら[規定値として設定]をクリックしてResEditを.rcファイルを開く既定のアプリケーションに設定します。

規定値として設定

以後は、[ソリューション エクスプローラ]で.rcファイルをダブルクリックするとResEditで開いて編集出来るようになります。

ResEdit


Visual StudioのコンパイラにLLVM Clangを使用する

LLVM Download PageからPre-built BinariesのClang for Windowsをクリックして、LLVM-x.x.x-win32.exeをダウンロードして実行します

LLVMへのPATHを設定するか聞かれるので、

「Add LLVM to the system PATH for all users」か「Add LLVM to the system PATH for Current user」を選択します。

「Create LLVM Desktop Icon」はチェックしてもアイコンは作られないようなので無視でいいです

PATHの設定

次にインストール先を聞かれるので次へ

デフォルトのインストール先はC:\Program Files (x86)\LLVMです。

最後にスタートメニューにショートカットを作成するか聞かれますが、これも特に何も作成されないようなので無視してインストールを選択

無事にインストールが完了したらC:\Program Files (x86)\LLVM\tools\msbuildinstall.batがあるので管理者として実行します

ResEdit

エクスプローラから実行するとコマンドプロンプトが一瞬で閉じてしまうのでわかりづらいですが、以下のように表示されればOKです

これでClangがVisual Studioに組み込まれました。

install.bat

後はいつも通りVisual Studioを立ち上げプロジェクトのプロパティを開いたら、

[構成プロパティ]>[全般]>[プラットフォーム ツールセット]の中にLLVM-vs20xxLLVM-2013_xpが追加されているのでこれを選択すれば、コンパイラがVisual C++標準のcl.exeからclang-cl.exeに変更されclangでビルド出来るようになります。

LLVMのインストーラはLLVM-x.x.x-win32.exeとなっていますが、構成マネージャでプラットフォームにx64を追加すれば64bitでもビルド出来ます。

プロジェクトのプロパティ

clang-cl.exeを有効にした状態でビルドすると、出力画面に1>clang-cl.exe : warning : argument unused during compilation: ’…’と警告が大量に出ますが気にしないで下さい

出力


コマンドラインからclang-cl.exeを使用する

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VCにPATHを通しておき、

32bitでコンパイルしたいならvcvarsall x86、64bitならvcvarsall x86_amd64とコマンドプロンプトに入力して実行

もしくは、スタート画面から[Visual Studio ツール]を選択し、いくつかあるショートカットの中から32bitなら[x86 Native Tools]と書かれているのを、64bitなら[x64 Cross Tools]と書かれているものを実行します。

後は、clang-cl /W4 hello.cの用な感じ(x64の場合は-m64オプションを指定)で実行すればOKです。

clang-cl.exeのオプションはcl.exeとほぼ共通でclang-cl.exeは説明が英語ですが、cl.exeの方は日本語で表示されるのでcl.exeのヘルプを参照しながら設定した方が楽だと思います。

C:\clang-cl /?

OVERVIEW: clang LLVM compiler

USAGE: clang-cl [options] <inputs>

CL.EXE COMPATIBILITY OPTIONS:
/? Display available options
/arch:<value> Set architecture for code generation
/C Don't discard comments when preprocessing
/c Compile only
/D <macro[=value]> Define macro
/EH<value> Exception handling model
/EP Disable linemarker output and preprocess to stdout
/E Preprocess to stdout
/fallback Fall back to cl.exe if clang-cl fails to compile
/FA Output assembly code file during compilation
/Fa<file or directory> Output assembly code to this file during compilation
/Fe<file or directory> Set output executable file or directory (ends in / or \)
/FI <value> Include file before parsing
/Fi<file> Set preprocess output file name
/Fo<file or directory> Set output object file, or directory (ends in / or \)
/GF- Disable string pooling
/GR- Disable emission of RTTI data
/GR Enable emission of RTTI data
/Gw- Don't put each data item in its own section
/Gw Put each data item in its own section
/Gy- Don't put each function in its own section
/Gy Put each function in its own section
/help Display available options
/I <dir> Add directory to include search path
/J Make char type unsigned
/LDd Create debug DLL
/LD Create DLL
/link <options> Forward options to the linker
/MDd Use DLL debug run-time
/MD Use DLL run-time
/MTd Use static debug run-time
/MT Use static run-time
/Ob0 Disable inlining
/Od Disable optimization
/Oi- Disable use of builtin functions
/Oi Enable use of builtin functions
/Os Optimize for size
/Ot Optimize for speed
/Ox Maximum optimization
/Oy- Disable frame pointer omission
/Oy Enable frame pointer omission
/O<n> Optimization level
/P Preprocess to file
/showIncludes Print info about included files to stderr
/TC Treat all source files as C
/Tc <filename> Specify a C source file
/TP Treat all source files as C++
/Tp <filename> Specify a C++ source file
/U <macro> Undefine macro
/vd<value> Control vtordisp placement
/vmb Use a best-case representation method for member pointers
/vmg Use a most-general representation for member pointers
/vmm Set the default most-general representation to multiple inheritance
/vms Set the default most-general representation to single inheritance
/vmv Set the default most-general representation to virtual inheritance
/W0 Disable all warnings
/W1 Enable -Wall
/W2 Enable -Wall
/W3 Enable -Wall
/W4 Enable -Wall
/Wall Enable -Wall
/WX- Do not treat warnings as errors
/WX Treat warnings as errors
/w Disable all warnings
/Zi Enable debug information
/Zs Syntax-check only

OPTIONS:
-### Print (but do not run) the commands to run for this compilation
-fms-compatibility-version=<value>
Dot-separated value representing the Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))
-fmsc-version=<value> Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))
-fsanitize-blacklist=<value>
Path to blacklist file for sanitizers
-fsanitize=<check> Enable runtime instrumentation for bug detection: address (memory errors) | thread (race detection) | undefined (miscellaneous undefined behavior)
-mllvm <value> Additional arguments to forward to LLVM's option processing
-Qunused-arguments Don't emit warning for unused driver arguments
-R<remark> Enable the specified remark
--target=<value> Generate code for the given target
-v Show commands to run and use verbose output
-W<warning> Enable the specified warning
-Xclang <arg> Pass <arg> to the clang compiler