著作一覧 |
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]));燃えよウータン(期間生産限定盤)(ウータン・クラン)
ジェズイットを見習え |