| 著作一覧 |
VS2015のときは、c2.dll問題とかあってもなんとなくクリアできていたのだが(clangはx86用だということさえわかれば、あとは適切なほうのclang.exeのPATHを設定する)、VS2017では常に失敗するようになった。
-vを付けてやり直せと出てきたので、やってみると、link.exeの起動に失敗している。
おや? と思ってVS2015のclangで見てみると、こちらはlink.exeをフルパスで起動している。ふつうに考えてみれば、MSがclangをコマンドラインで利用できないように一工夫したようだ。本気か?
で、解決策として、clang.exeと同じディレクトリにlink.exeを入れるとか考えてみたが、ばかげている。
であれば、しょうがない。
MSBuildの出番である。
とはいえ、なんかいろいろあるので、AppWizardにコンソールアプリケーションをclang指定で作らせたvcxprojから余分なものを削除することにした。
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<VCProjectVersion>15.0</VCProjectVersion>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141_clang_c2</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ItemDefinitionGroup>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="$(src)" />
</ItemGroup>
</Project>
Developer Command Promptを使って
MSBuild /p:src=ソースファイル名
で実行する(1ファイル専用)。実行ファイル名はvcxprojの名前になる。
x64の場合は
MSBuild /p:src=ソースファイル名 /p:Platform=x64
Releaseディレクトリに生成されてしまうのが気にくわないが、これ以上調べる気にはならないので、こんなものだな。
clangを使っているかclを使っているかを確認するには、可変長配列を書けばわかる。
char a[strlen(argv[0]) + strlen(argv[1]) + 1]; strcat(strcpy(a, argv[0]), argv[1]));
燃えよウータン(期間生産限定盤)(ウータン・クラン)
ジェズイットを見習え |