clang-cl

概要:Visual C ++コンパイラー cl.exeとの互換性のために設計された、clangドライバーの代替コマンドライン インターフェース

警告

Clang 3.4 のリリースノート には、非常に実験的であることが明記されている。

コマンドラインビルド

clang-clは、cl.exe と同じ引数で、動作する事が意図されています。
clang-cl をコマンドラインから使用する場合、cl.exe と同様に、vcvars32.bat などでコマンド ライン ビルドのパスと環境変数の設定を行う必要があります。
C:\>"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
C:\>clang-cl.exe hello.c

C:\>hello.exe
hello world

C:>

警告とシンタックスチェック

概要:
  • バックアップファイルの作成
  • フォーマット整形
  • 警告とシンタックスチェック
@echo off
setlocal

rem バックアップファイル作成
copy %1 %1.bak
rem フォーマット
clang-format -i -style="{BasedOnStyle: llvm, AccessModifierOffset: -4, IndentWidth: 4, TabWidth: 4, UseTab: Always, PointerBindsToType: true}" %1
rem INCLUDE が定義されていなかったら、vcvars32.bat を読み込む
set | findstr ^INCLUDE= >nul 2>nul
if NOT {%ERRORLEVEL%} == {0} call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
rem 警告とシンタックスチェック
clang-cl -Wall -Zs %1

endlocal
pause

VisualStudio(IDE)からClangを使う

注釈

VisualStudioで設定して使われるコンパイラーは、内容が clang-cl と同じ、
C:\Program Files (x86)\LLVM\msbuild-bin\cl.exe が利用される。

使用準備

1.バッチファイルを実行して、ツールセットをインストールする

> cd "C:\Program Files (x86)\LLVM\tools\msbuild"
> install.bat

2.VisualStudioの設定

プロジェクトのプロパティ( Alt + F7 )から、[構成プロパティ][全般][プラットフォーム ツールセット]にて、
LLVM-vs2013 を選択する。
LLVM-vs2013

実行結果(サンプル)

警告
10      warning : expression result unused [-Wunused-value]     main.cpp        75      24      clang-cl_Test
11      warning : expression result unused [-Wunused-value]     main.cpp        76      24      clang-cl_Test
12      warning : expression result unused [-Wunused-value]     main.cpp        218     24      clang-cl_Test
8       warning : conversion from string literal to 'TCHAR *' (aka 'char *') is deprecated [-Wc++11-compat-deprecated-writable-strings] main.cpp        61      20      clang-cl_Test
9       warning : conversion from string literal to 'TCHAR *' (aka 'char *') is deprecated [-Wc++11-compat-deprecated-writable-strings] main.cpp        62      26      clang-cl_Test
1       warning : argument unused during compilation: '/ZI'     clang-cl.exe    clang-cl_Test
4       warning : argument unused during compilation: '/GS'     clang-cl.exe    clang-cl_Test
2       warning : argument unused during compilation: '/Gm'     clang-cl.exe    clang-cl_Test
7       warning : argument unused during compilation: '/Gd'     clang-cl.exe    clang-cl_Test
5       warning : argument unused during compilation: '/fp:precise'     clang-cl.exe    clang-cl_Test
6       warning : argument unused during compilation: '/FdDebug\vc120.pdb'      clang-cl.exe    clang-cl_Test
3       warning : argument unused during compilation: '/EHsc'   clang-cl.exe    clang-cl_Test
ビルドログ
1>------ ビルド開始: プロジェクト:clang-cl_Test, 構成:Debug Win32 ------
1>clang-cl.exe : warning : argument unused during compilation: '/ZI'
1>clang-cl.exe : warning : argument unused during compilation: '/Gm'
1>clang-cl.exe : warning : argument unused during compilation: '/EHsc'
1>clang-cl.exe : warning : argument unused during compilation: '/GS'
1>clang-cl.exe : warning : argument unused during compilation: '/fp:precise'
1>clang-cl.exe : warning : argument unused during compilation: '/FdDebug\vc120.pdb'
1>clang-cl.exe : warning : argument unused during compilation: '/Gd'
1>main.cpp(61,20): warning : conversion from string literal to 'TCHAR *' (aka 'char *') is deprecated [-Wc++11-compat-deprecated-writable-strings]
1>  TCHAR* szTitle = _T("szTitle");                                 // <83>^<83>C<83>g<83><8B> <83>o<81>[<82>フテ<83>L<83>X<83>g
1>                      ^
1>  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\tchar.h(2498,24) :  note: expanded from macro '_T'
1>  #define _T(x)       __T(x)
1>                          ^
1>  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\tchar.h(914,20) :  note: expanded from macro '__T'
1>  #define __T(x)      x
1>                      ^
1>main.cpp(62,26): warning : conversion from string literal to 'TCHAR *' (aka 'char *') is deprecated [-Wc++11-compat-deprecated-writable-strings]
1>  TCHAR* szWindowClass = _T("szWindowClass");                     // <83><81><83>C<83><93> <83>E<83>B<83><93><83>h<83>E <83>N<83><89><83>X<96><BC>
1>                            ^
1>  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\tchar.h(2498,24) :  note: expanded from macro '_T'
1>  #define _T(x)       __T(x)
1>                          ^
1>  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\tchar.h(914,20) :  note: expanded from macro '__T'
1>  #define __T(x)      x
1>                      ^
1>main.cpp(75,24): warning : expression result unused [-Wunused-value]
1>          UNREFERENCED_PARAMETER(hPrevInstance);
1>                                 ^~~~~~~~~~~~~
1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(2073,44) :  note: expanded from macro 'UNREFERENCED_PARAMETER'
1>  #define UNREFERENCED_PARAMETER(P)          (P)
1>                                              ^
1>main.cpp(76,24): warning : expression result unused [-Wunused-value]
1>          UNREFERENCED_PARAMETER(lpCmdLine);
1>                                 ^~~~~~~~~
1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(2073,44) :  note: expanded from macro 'UNREFERENCED_PARAMETER'
1>  #define UNREFERENCED_PARAMETER(P)          (P)
1>                                              ^
1>main.cpp(218,24): warning : expression result unused [-Wunused-value]
1>          UNREFERENCED_PARAMETER(lParam);
1>                                 ^~~~~~
1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(2073,44) :  note: expanded from macro 'UNREFERENCED_PARAMETER'
1>  #define UNREFERENCED_PARAMETER(P)          (P)
1>                                              ^
1>  5 warnings generated.
1>  clang-cl_Test.vcxproj -> c:\users\owner\documents\visual studio 2013\Projects\clang-cl_Test\Debug\clang-cl_Test.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

警告: argument unused during compilation

概要:コンパイル時に使用されていない引数(現在サポートされていない引数)

注釈

-Qunused-arguments オプションでこの警告を無視。

警告

/ZI と、 /Fd オプションがサポートされていないため、ブレークポイントで止められない。。


サンプル

1>clang-cl.exe : warning : argument unused during compilation: '/ZI'
1>clang-cl.exe : warning : argument unused during compilation: '/Gm'
1>clang-cl.exe : warning : argument unused during compilation: '/EHsc'
1>clang-cl.exe : warning : argument unused during compilation: '/GS'
1>clang-cl.exe : warning : argument unused during compilation: '/fp:precise'
1>clang-cl.exe : warning : argument unused during compilation: '/FdDebug\vc120.pdb'
1>clang-cl.exe : warning : argument unused during compilation: '/Gd'
/ZI エディット コンティニュのデバッグ情報を有効にする
/Gm[-] 最小リビルドを有効にする
/GX[-] C++ EH を有効にする (/EHsc と同様)
/GS[-] セキュリティ チェックを有効にする/GR[-] C++ RTTI を有効にする
/fp:precise 浮動小数点モデルの選択: 浮動小数点モデルです。結果は予測可能です
/Fd[file] .PDB ファイル名を指定する
/Gd __cdecl の呼び出し規約