古き悪しき全プロジェクト共通のVC++ディレクトリ的なSomethingを設定する方法
むか~し、むかし。Visual Studio 2008では設定>プロジェクトとソリューションからVC++ディレクトリの設定を行うことが出来た。
この設定では、全てのプロジェクトに共通した設定を書き込むことが出来、大変重宝しておった。
その一方で、色々な問題からVisual Studio 2010の頃には廃止された。
それ以来、プロジェクトに個別で設定するか、ユーザープロパティシートに書き込んで無理矢理に再現するかの2択になっている。
それで、先日Visual Studio 2017にアップデートした際に、再設定する必要があったので、書くネタにも困っていたところだし、メモとして残しておく。
ユーザプロパティシートは"%USERPROFILE%\Local\Microsoft\MSBuild\v4.0"にあるので、自分の環境に合わせて、Win32(x86)、Win64(x64)を編集する。
なお、今回紹介する設定方法はx86、x64共用なので、どちらでも同じ内容を書けば良い。
以下は実際の設定内容。
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <ItemDefinitionGroup /> <ItemGroup /> <PropertyGroup> <!--プラットフォーム名。x86かx64か--> <ShortPlatform Condition="'$(Platform)' == 'Win32'">x86</ShortPlatform> <ShortPlatform Condition="'$(Platform)' != 'Win32'">x64</ShortPlatform> <!--ツールセット名。v141がVisual Studio 2017--> <Toolset Condition="'$(PlatformToolset)' == 'v120'">vc12</Toolset> <Toolset Condition="'$(PlatformToolset)' == 'v140'">vc14</Toolset> <Toolset Condition="'$(PlatformToolset)' == 'v141'">vc14</Toolset> </PropertyGroup> <Choose> <When Condition="'$(PlatformToolset)' == 'v120' "> <PropertyGroup> <LibraryPath>D:\library\lib;$(LibraryPath)</LibraryPath> <IncludePath>D:\library\include;$(IncludePath)</IncludePath> </PropertyGroup> </When> <When Condition="'$(PlatformToolset)' == 'v140' AND '$(Platform)' == 'Win32'"> <PropertyGroup> <LibraryPath>D:\vs14library\lib;D:\vs14library\$(ShortPlatform)\$(Toolset)\lib;D:\vs14library\lib\vc_lib;$(LibraryPath)</LibraryPath> <IncludePath>D:\vs14library\include;$(IncludePath)</IncludePath> </PropertyGroup> </When> <When Condition="'$(PlatformToolset)' == 'v140' AND '$(Platform)' != 'Win32'"> <PropertyGroup> <LibraryPath>D:\vs14library\lib;D:\vs14library\$(ShortPlatform)\$(Toolset)\lib;D:\vs14library\lib\vc_x64_lib;$(LibraryPath)</LibraryPath> <IncludePath>D:\vs14library\include;$(IncludePath)</IncludePath> </PropertyGroup> </When> <When Condition="'$(PlatformToolset)' == 'v141' AND '$(Platform)' == 'Win32'"> <PropertyGroup> <LibraryPath>D:\vs14library\lib;D:\vs14library\$(ShortPlatform)\$(Toolset)\lib;D:\vs14library\lib\vc_lib;$(LibraryPath)</LibraryPath> <IncludePath>D:\vs14library\include;$(IncludePath)</IncludePath> </PropertyGroup> </When> <When Condition="'$(PlatformToolset)' == 'v141' AND '$(Platform)' != 'Win32'"> <PropertyGroup> <LibraryPath>D:\vs14library\lib;D:\vs14library\$(ShortPlatform)\$(Toolset)\lib;D:\vs14library\lib\vc_x64_lib;$(LibraryPath)</LibraryPath> <IncludePath>D:\vs14library\include;$(IncludePath)</IncludePath> </PropertyGroup> </When> </Choose> </Project>
以上なのでが、この設定ファイル、記述内容から何となくお察しかもしれないが、Visual Studio 2012の頃から使いまわしている。
そのため、中々にカオスなことになっているが悪しからず。
一応各部の解説をすると、Chooseタグが所謂if文にあたるタグで、WhenタグのCondition属性に式を設定する。このときif文内で使える変数はPropertyGroup内で宣言?した変数のみとなっている。
また、
つまるところ"D:\vs14library"とか"D:\library"とかなってる部分を自分の環境に合わせて変えれば良い。また、私の環境の場合、cmakeを使ってインストールしたライブラリをすべて1つのディレクトリに集約しているので1つないし、2、3個しかパスを足していないが、各ライブラリを別個のディレクトリにインストールしている場合、各ディレクトリを設定する必要がある。
ぶっちゃけ、Microsoftが公開している情報にたどり着けた試しがないせいか、実に5年間この説明があっているのかすらよくわからない。ただ、動いているという事実だけはあるので、まあいいかと捨て置いているので、誰か詳しい人いたらコメントください。