とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

ClangVSxをインストールしてみた

ClangVSxとは

ClangをVisualStudio2010で動くようにするアドインです。

環境

導入手順

STEP 1(ダウンロード)

アドインをダウンロードします。
https://github.com/ishani/ClangVSx

今回試したファイル
ishani-ClangVSx-f98e139.tar.gz

STEP 2(ビルド)

ソリューションをC#でビルドします。
\bin\ClangVSx.dll が生成されると成功です。

STEP 3(コピー)

下記、DLLと設定ファイルを

  • ClangVSx.AddIn
  • ClangVSx.dll

Addinsディレクトリへコピーします。
C:\Users\<ユーザー名>\Documents\Visual Studio 2010\Addins
ディレクトリが無ければ作って下さい。)

STEP 4(確認)

Visual Studio 2010を再起動します。
clang のメニューが作られていると成功です。

ClangVSxの設定を行う

clang.exe へのパスを設定します。

(ボタン消えてますが気にしない)

ビルドする。


ClangVSx 0.2 | Clang Compiler Bridge | built on 2000/01/02 14:34:20

Building Project : hallo_clang
Configuration : Debug|Win32
Linker Output : C:\Users\hoge\Documents\github\hallo_clang\hallo_clang\Debug\hallo_clang.exe

Custom Build Steps...

                                                                                                                                                                                                                                                              • -
Compiling : - hallo_clang.cpp clang: warning: argument unused during compilation: '-fdelayed-template-parsing' clang: warning: argument unused during compilation: '-fdiagnostics-format=msvc' C:\Users\hoge\Documents\github\hallo_clang\hallo_clang\hallo_clang.cpp(9) : warning: conversion specifies type 'double' but the argument has type 'const char *' [-Wformat] printf("%f", "こんにちわ、Clang."); ~^ ~~~~~~~~~~~~~~~~~~~~ %s 1 warning generated.
                                                                                                                                                                                                                                                              • -

リンクについて

clangにパッチを当てるとか clang 3.0 を使うとリンクが通るかもしれませんが、未検証です。
作者のwebによるとリンクも通る模様。

 - stdafx.cpp
clang: warning: argument unused during compilation: '-fdelayed-template-parsing'
clang: warning: argument unused during compilation: '-fdiagnostics-format=msvc'
                                                                                                                                                                                                                                                              • -
Compilation Successful
                                                                                                                                                                                                                                                              • -
Linking : /OUT:"C:\Users\hoge\Documents\github\hallo_clang\hallo_clang\Debug\hallo_clang.exe" "Debug\hallo_clang.obj" "Debug\stdafx.obj" /NOLOGO /MACHINE:X86 /DYNAMICBASE /SUBSYSTEM:CONSOLE /DEBUG msvcrtd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /LIBPATH:"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib" /LIBPATH:"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\lib" Linking failed. msvcrtd.lib(crtexe.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。 C:\Users\hoge\Documents\github\hallo_clang\hallo_clang\Debug\hallo_clang.exe : fatal error LNK1120: 外部参照 1 が未解決です。

windows.h

windows.hをincludeしているとコンパイルエラーになります。

Compiling :
 - hallo_clang.cpp
clang: warning: argument unused during compilation: '-fdelayed-template-parsing'
clang: warning: argument unused during compilation: '-fdiagnostics-format=msvc'
In file included from C:\Users\hoge\Documents\github\hallo_clang\hallo_clang\hallo_clang.cpp:5:
In file included from C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/include/windows.h:201:
In file included from C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/include/ole2.h:37:
C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/include/objbase.h(239) :  error: unknown type name 'IUnknown'
        static_cast(*pp);    // make sure everyone derives from IUnknown
                    ^

ClangVSxのwebによると、Clang へ下記パッチを当てておくとビルドが通るようです。(未検証です)

まとめ

Visual Studio 2010 から Clang でビルドがお手軽に出来るようになりました。
使い慣れた環境からClangでサクッとコンパイルして、結果を確認できるのはうれしい限りです。