Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PlatformToolset 指定をプロパティーシートに分離して VS2017 および VS2019 で両対応できるようにする #866

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions HeaderMake/HeaderMake.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,14 @@
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(ProjectDir)..\vcx-props\vcxcompat.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

メモ:このままにしとくとvs2019だけをインストールしたマシンで そんなtoolsetねーよ! と怒られます。また、vs2017とvs2019の両方が入ったマシンでは、vs2019でビルドしてもvs2017のC++コンパイラが使われます。

<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
Expand Down
3 changes: 1 addition & 2 deletions MakefileMake/MakefileMake.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,14 @@
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(ProjectDir)..\vcx-props\vcxcompat.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
- [Build Requirements](#build-requirements)
- [Visual Studio Community 2017](#visual-studio-community-2017)
- [Visual Studio Install options required](#visual-studio-install-options-required)
- [Visual Studio Community 2019 に関しては対応を検討中です。](#visual-studio-community-2019-に関しては対応を検討中です)
- [How to build](#how-to-build)
- [詳細情報](#詳細情報)
- [PR(Pull Request) を簡単にローカルに取得する方法](#prpull-request-を簡単にローカルに取得する方法)
Expand Down Expand Up @@ -50,7 +51,10 @@ https://github.com/sakura-editor/sakura/wiki

## Build Requirements
### Visual Studio Community 2017
- [Visual Studio Community 2017](https://www.visualstudio.com/downloads/)

現状では Visual Studio Community 2017 を使用しています。

- [Visual Studio Community 2017](https://visualstudio.microsoft.com/vs/older-downloads/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

メモ:リンクは最新版(=vs2019)に置き換わってるのでついでに対応が必要。


#### Visual Studio Install options required
- Windows SDK
Expand All @@ -60,6 +64,13 @@ https://github.com/sakura-editor/sakura/wiki

More information: https://github.com/sakura-editor/sakura/issues/6

### Visual Studio Community 2019 に関しては対応を検討中です。

- [Visual Studio Community 2019](https://www.visualstudio.com/downloads/)

Visual Studio 2017/2019 の両対応に関しては #866 で対処済みです。
[仕組みに関してはこちらを参照](vcx-props/project-PlatformToolset.md)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ちなみにこの PR 上でこちらのリンクをクリックすると not found になるのは master を見に行くからです。
PR がマージされたらいけるはず。ローカルで visual studio code の preview 機能でリンクをたどるといけました。


## How to build

- [7Zip](https://sevenzip.osdn.jp/) のインストールして 7z.exe へのパスを通します。
Expand Down
5 changes: 1 addition & 4 deletions sakura/sakura.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,25 @@
<ProjectGuid>{AF03508C-515E-4A0E-87BE-67ED1E254BD0}</ProjectGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(ProjectDir)..\vcx-props\vcxcompat.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
Expand Down
5 changes: 1 addition & 4 deletions sakura_lang_en_US/sakura_lang_en_US.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,24 @@
<ProjectName>sakura_lang_en_US</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(ProjectDir)..\vcx-props\vcxcompat.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
Expand Down
51 changes: 51 additions & 0 deletions vcx-props/project-PlatformToolset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Visual Studio の 各バージョンの PlatformToolset に関して
beru marked this conversation as resolved.
Show resolved Hide resolved

<!-- TOC -->

- [Visual Studio の 各バージョンの PlatformToolset に関して](#visual-studio-の-各バージョンの-platformtoolset-に関して)
- [PlatformToolset の対応関係](#platformtoolset-の対応関係)
- [異なる Visual Studio のバージョンで開いたときの動作](#異なる-visual-studio-のバージョンで開いたときの動作)
- [解決策](#解決策)
- [参考情報](#参考情報)
- [コマンドラインで PlatformToolset の設定を上書きする方法](#コマンドラインで-platformtoolset-の設定を上書きする方法)
- [PlatformToolset の指定に関する参考リンク](#platformtoolset-の指定に関する参考リンク)

<!-- /TOC -->

## PlatformToolset の対応関係

Visual Studio の各バージョンごとにデフォルトの PlatformToolset (コンパイルエンジンのバージョン)があります。

|Visual Studio のバージョン|PlatformToolset|
|--|--|
|Visual Studio 2017|v141|
|Visaul Studio 2019|v142|

## 異なる Visual Studio のバージョンで開いたときの動作

Visual Studio 2017 で作成したソリューション/プロジェクトを Visual Studio 2019 で開くと Visaul Studio 2019 の標準の v142 に変換するか
確認するダイアログが出ます。一度ソリューションを開くとユーザーの選択がローカルに保存されるので同じソリューションを再度開いても再度確認される
ことはありません。

しかしながら別のフォルダにソースコードを clone した場合などには再度ユーザーに確認するダイアログが出るので煩雑です。

## 解決策

1. `PlatformToolset` の設定を[外部のファイル](vcxcompat.props) にまとめます
2. そのファイルでは、 `Condition` の指定で開かれた Visaul Studio のバージョンによって、 `デフォルトで 使用する PlatformToolset` を指定します。
3. 各プロジェクトファイルで上記ファイルを [Import Project](https://docs.microsoft.com/ja-jp/visualstudio/msbuild/import-element-msbuild?view=vs-2019) でインクルードします。

### 参考情報

https://qiita.com/yumetodo/items/a8324efaf83c9c08d168


## コマンドラインで PlatformToolset の設定を上書きする方法

上記方法によって、デフォルトで使用する `PlatformToolset` を変更しますが、
`/p:PlatformToolset=v141` あるいは `/p:PlatformToolset=v142` のようなパラメータを `msbuild.exe` の引数に
追加してやれば、デフォルトの設定を上書きして好きな `PlatformToolset` でコンパイルすることができます。

### PlatformToolset の指定に関する参考リンク

https://docs.microsoft.com/en-us/cpp/build/reference/msbuild-visual-cpp-overview?view=vs-2019#platformtoolset-property
9 changes: 9 additions & 0 deletions vcx-props/vcxcompat.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration" Condition="'$(VisualStudioVersion)' == '15.0'">
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(VisualStudioVersion)' == '16.0'">
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
</Project>