From 58f5897f311fafe8595c0e2e9f0ebfbffe7cdf72 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Sun, 9 Jan 2022 20:32:02 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0NUM=5FV?= =?UTF-8?q?SVERSION=E3=81=8C=E7=84=A1=E8=A6=96=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 8b5f1c1bef..139c4702d3 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -161,10 +161,14 @@ exit /b :: 16 => Visual Studio 2019 :: --------------------------------------------------------------------------------------------------------------------- :msbuild + if defined ARG_VSVERSION ( + goto :convert_arg_vsversion + ) + goto :varidate_num_vsversion + +:convert_arg_vsversion :: convert productLineVersion to Internal Major Version - if "%ARG_VSVERSION%" == "" ( - set NUM_VSVERSION=15 - ) else if "%ARG_VSVERSION%" == "2017" ( + if "%ARG_VSVERSION%" == "2017" ( set NUM_VSVERSION=15 ) else if "%ARG_VSVERSION%" == "2019" ( set NUM_VSVERSION=16 @@ -176,6 +180,11 @@ exit /b set NUM_VSVERSION=%ARG_VSVERSION% ) +:varidate_num_vsversion + if not defined NUM_VSVERSION ( + set NUM_VSVERSION=15 + ) + call :check_installed_vsversion call :find_msbuild From a617d1205e3dff11702a26ad90aadfb79f94afc9 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 Jan 2022 17:22:39 +0900 Subject: [PATCH 2/6] =?UTF-8?q?find-tools.bat=E3=81=AE=E7=92=B0=E5=A2=83?= =?UTF-8?q?=E5=A4=89=E6=95=B0=E3=82=AF=E3=83=AA=E3=82=A2=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E9=96=A2=E6=95=B0=E5=8C=96=E3=81=97=E3=81=A6=E5=86=85?= =?UTF-8?q?=E9=83=A8=E3=81=8B=E3=82=89=E5=91=BC=E3=81=B9=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 139c4702d3..c4f46ab846 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -2,22 +2,7 @@ setlocal if "%1" equ "clear" ( - endlocal - set CMD_GIT= - set CMD_7Z= - set CMD_HHC= - set CMD_ISCC= - set CMD_CPPCHECK= - set CMD_DOXYGEN= - set CMD_VSWHERE= - set CMD_MSBUILD= - set CMD_CMAKE= - set CMD_NINJA= - set CMD_LEPROC= - set CMD_PYTHON= - set NUM_VSVERSION= - set CMAKE_G_PARAM= - set FIND_TOOLS_CALLED= + call :clear_variables echo find-tools.bat has been cleared exit /b ) else if "%~1" neq "" ( @@ -75,6 +60,25 @@ endlocal ^ set FIND_TOOLS_CALLED=1 exit /b +:clear_variables + endlocal + set CMD_GIT= + set CMD_7Z= + set CMD_HHC= + set CMD_ISCC= + set CMD_CPPCHECK= + set CMD_DOXYGEN= + set CMD_VSWHERE= + set CMD_MSBUILD= + set CMD_CMAKE= + set CMD_NINJA= + set CMD_LEPROC= + set CMD_PYTHON= + set NUM_VSVERSION= + set CMAKE_G_PARAM= + set FIND_TOOLS_CALLED= + exit /b + :Git set APPDIR=Git\Cmd set PATH2=%PATH%;%ProgramFiles%\%APPDIR%\;%ProgramFiles(x86)%\%APPDIR%\;%ProgramW6432%\%APPDIR%\; From 2b61f1fbf8df030364a7a2335aa9ce6964353920 Mon Sep 17 00:00:00 2001 From: berryzplus Date: Mon, 10 Jan 2022 18:39:47 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=E5=BC=95=E6=95=B0(ARG=5FVSVERSION)?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=9F=E3=82=89=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E5=A4=89=E6=95=B0=E3=82=92=E6=B4=97=E3=81=84=E6=9B=BF?= =?UTF-8?q?=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E7=B5=84=E3=81=BF?= =?UTF-8?q?=E3=81=AA=E3=81=8A=E3=81=97=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.bat | 157 +++++++++++++++++++++---------------------- 1 file changed, 78 insertions(+), 79 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index c4f46ab846..3c6251332e 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -5,9 +5,34 @@ if "%1" equ "clear" ( call :clear_variables echo find-tools.bat has been cleared exit /b -) else if "%~1" neq "" ( +) + +if not defined CMD_VSWHERE call :vswhere 2> nul +if not exist "%CMD_VSWHERE%" ( + echo vswhere was not found + exit /b +) + +set ARG_VSVERSION= +if "%1" neq "" ( set "ARG_VSVERSION=%~1" ) +call :convert_arg_vsversion +if not defined ARG_VSVERSION ( + call :convert_arg_vsversion +) + +if defined NUM_VSVERSION ( + if "%ARG_VSVERSION%" neq "%NUM_VSVERSION%" ( + call :clear_variables + setlocal + set "ARG_VSVERSION=%~1" + call :vswhere + call :convert_arg_vsversion + ) +) +set NUM_VSVERSION=%ARG_VSVERSION% + if defined FIND_TOOLS_CALLED ( echo find-tools.bat already called exit /b @@ -20,7 +45,6 @@ if not defined CMD_HHC call :hhc 2> nul if not defined CMD_ISCC call :iscc 2> nul if not defined CMD_CPPCHECK call :cppcheck 2> nul if not defined CMD_DOXYGEN call :doxygen 2> nul -if not defined CMD_VSWHERE call :vswhere 2> nul if not defined CMD_MSBUILD call :msbuild 2> nul if not defined CMD_CMAKE call :cmake 2> nul if not defined CMD_NINJA call :cmake 2> nul @@ -79,6 +103,44 @@ exit /b set FIND_TOOLS_CALLED= exit /b +:convert_arg_vsversion + if not defined ARG_VSVERSION ( + set "ARG_VSVERSION=%NUM_VSVERSION%" + ) + if not defined ARG_VSVERSION ( + set "ARG_VSVERSION=latest" + ) + + :: convert productLineVersion to Internal Major Version + if "%ARG_VSVERSION%" == "2017" ( + set ARG_VSVERSION=15 + ) else if "%ARG_VSVERSION%" == "2019" ( + set ARG_VSVERSION=16 + ) else if "%ARG_VSVERSION%" == "2022" ( + set ARG_VSVERSION=17 + ) else if "%ARG_VSVERSION%" == "latest" ( + call :get_latest_installed_vsversion + ) + ::指定されたバージョンのC++がインストールされているかチェック + set /a ARG_VSVERSION_NEXT=ARG_VSVERSION + 1 + for /f "usebackq delims=" %%d in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -version [%ARG_VSVERSION%^,%ARG_VSVERSION_NEXT%^)`) do ( + if exist "%%d" exit /b + ) + ::指定されたバージョンが存在しなければ「指定なし」にしてやり直す + set ARG_VSVERSION= + exit /b + +:get_latest_installed_vsversion + for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -latest`) do ( + set VSVERSION=%%v + ) + if defined VSVERSION ( + set ARG_VSVERSION=%VSVERSION:~0,2% + ) else ( + set ARG_VSVERSION=15 + ) + exit /b + :Git set APPDIR=Git\Cmd set PATH2=%PATH%;%ProgramFiles%\%APPDIR%\;%ProgramFiles(x86)%\%APPDIR%\;%ProgramW6432%\%APPDIR%\; @@ -156,104 +218,41 @@ exit /b :: --------------------------------------------------------------------------------------------------------------------- :: sub routine for finding msbuild -:: -:: ARG_VSVERSION -:: latest => the latest version of installed Visual Studio -:: 2017 => Visual Studio 2017 -:: 2019 => Visual Studio 2019 -:: 15 => Visual Studio 2017 -:: 16 => Visual Studio 2019 :: --------------------------------------------------------------------------------------------------------------------- :msbuild - if defined ARG_VSVERSION ( - goto :convert_arg_vsversion - ) - goto :varidate_num_vsversion - -:convert_arg_vsversion - :: convert productLineVersion to Internal Major Version - if "%ARG_VSVERSION%" == "2017" ( - set NUM_VSVERSION=15 - ) else if "%ARG_VSVERSION%" == "2019" ( - set NUM_VSVERSION=16 - ) else if "%ARG_VSVERSION%" == "2022" ( - set NUM_VSVERSION=17 - ) else if "%ARG_VSVERSION%" == "latest" ( - call :check_latest_installed_vsversion - ) else ( - set NUM_VSVERSION=%ARG_VSVERSION% - ) - -:varidate_num_vsversion - if not defined NUM_VSVERSION ( - set NUM_VSVERSION=15 - ) - - call :check_installed_vsversion - - call :find_msbuild - if not exist "%CMD_MSBUILD%" ( + :: vs2017単独インストールで導入されるvswhereには機能制限がある + if "%ARG_VSVERSION%" == "15" ( call :find_msbuild_legacy - set NUM_VSVERSION=15 - ) - - if "%NUM_VSVERSION%" == "15" ( set CMAKE_G_PARAM=Visual Studio 15 2017 - ) else if "%NUM_VSVERSION%" == "16" ( - set CMAKE_G_PARAM=Visual Studio 16 2019 - ) else if "%NUM_VSVERSION%" == "17" ( - set CMAKE_G_PARAM=Visual Studio 17 2022 ) else ( + call :find_msbuild call :set_cmake_gparam_automatically ) exit /b -:set_cmake_gparam_automatically - call :get_product_line_version - set CMAKE_G_PARAM=Visual Studio %NUM_VSVERSION% %VS_PRODUCT_LINE_VERSION% - exit /b - -:get_product_line_version - set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 - for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property catalog_productLineVersion -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( - set VS_PRODUCT_LINE_VERSION=%%v - ) - exit /b - -:check_latest_installed_vsversion - for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -latest`) do ( - set VSVERSION=%%v - ) - set NUM_VSVERSION=%VSVERSION:~0,2% - exit /b - -:check_installed_vsversion - set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 - for /f "usebackq delims=" %%d in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( - if exist "%%d" exit /b - ) - call :check_latest_installed_vsversion - exit /b - :find_msbuild set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 for /f "usebackq delims=" %%a in (`"%CMD_VSWHERE%" -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( set "CMD_MSBUILD=%%a" ) - if exist "%CMD_MSBUILD%" ( - exit /b - ) - set CMD_MSBUILD= exit /b :find_msbuild_legacy for /f "usebackq delims=" %%d in (`"%CMD_VSWHERE%" -requires Microsoft.Component.MSBuild -property installationPath -version [15^,16^)`) do ( set "CMD_MSBUILD=%%d\MSBuild\15.0\Bin\MSBuild.exe" ) - if exist "%CMD_MSBUILD%" ( - exit /b + exit /b + +:set_cmake_gparam_automatically + call :get_product_line_version + set CMAKE_G_PARAM=Visual Studio %NUM_VSVERSION% %VS_PRODUCT_LINE_VERSION% + exit /b + +:get_product_line_version + set /a NUM_VSVERSION_NEXT=NUM_VSVERSION + 1 + for /f "usebackq delims=" %%v in (`"%CMD_VSWHERE%" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property catalog_productLineVersion -version [%NUM_VSVERSION%^,%NUM_VSVERSION_NEXT%^)`) do ( + set VS_PRODUCT_LINE_VERSION=%%v ) - set CMD_MSBUILD= exit /b :cmake From e6cba4f95eb543533cce4616a966628001950e8b Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Sun, 23 Jan 2022 23:11:56 +0900 Subject: [PATCH 4/6] =?UTF-8?q?find-tools:=20=E7=B4=B0=E3=81=8B=E3=81=84?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=82=92=E5=AE=9F=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 変数のローカル化をやめるタイミングの変更 - 探索処理では`ARG_VSVERSION`ではなく、値が確定している`NUM_VSVERSION`を参照する - インデントに使用する文字を揃える --- tools/find-tools.bat | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/find-tools.bat b/tools/find-tools.bat index 3c6251332e..9113ecfeb0 100644 --- a/tools/find-tools.bat +++ b/tools/find-tools.bat @@ -2,6 +2,7 @@ setlocal if "%1" equ "clear" ( + endlocal call :clear_variables echo find-tools.bat has been cleared exit /b @@ -24,6 +25,7 @@ if not defined ARG_VSVERSION ( if defined NUM_VSVERSION ( if "%ARG_VSVERSION%" neq "%NUM_VSVERSION%" ( + endlocal call :clear_variables setlocal set "ARG_VSVERSION=%~1" @@ -85,7 +87,6 @@ set FIND_TOOLS_CALLED=1 exit /b :clear_variables - endlocal set CMD_GIT= set CMD_7Z= set CMD_HHC= @@ -221,7 +222,7 @@ exit /b :: --------------------------------------------------------------------------------------------------------------------- :msbuild :: vs2017単独インストールで導入されるvswhereには機能制限がある - if "%ARG_VSVERSION%" == "15" ( + if "%NUM_VSVERSION%" == "15" ( call :find_msbuild_legacy set CMAKE_G_PARAM=Visual Studio 15 2017 ) else ( @@ -296,7 +297,7 @@ exit /b call :find_py call :check_python_version if defined CMD_PYTHON ( - exit /b 0 + exit /b 0 ) call :find_python From e03800f30783bf4299f4b1f9a615af56d09c0c6d Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 1 Feb 2022 14:45:02 +0900 Subject: [PATCH 5/6] =?UTF-8?q?find-tools:=20=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=81=AB=E6=8E=A2=E7=B4=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B8=E3=83=83=E3=82=AF=E3=81=AE=E5=A4=89=E6=9B=B4=E3=82=92?= =?UTF-8?q?=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.md | 52 +++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/tools/find-tools.md b/tools/find-tools.md index 4a81f06241..be7c961e8c 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -19,7 +19,7 @@ | Inno Setup 5 | CMD_ISCC | Inno Setup 5 | ISCC.exe | | Cppcheck | CMD_CPPCHECK | cppcheck | cppcheck.exe | | Doxygen | CMD_DOXYGEN | doxygen\bin | doxygen.exe | -| vswhere | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | +| Visual Studio Locator | CMD_VSWHERE | Microsoft Visual Studio\Installer | vswhere.exe | | MSBuild | CMD_MSBUILD | 特殊 | MSBuild.exe | | Locale Emulator | CMD_LEPROC | なし | LEProc.exe | | Python | CMD_PYTHON | なし | py.exe (python.exe) | @@ -41,39 +41,31 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 ### ユーザーがビルドに使用する Visual Studio のバージョンを切り替える方法 -環境変数 ```ARG_VSVERSION``` の値でビルドに使用するバージョンを切り替えられる。 +環境変数 `NUM_VSVERSION` の値でビルドに使用するバージョンを切り替えられる。 -| ARG_VSVERSION | 使用される Visual Studio のバージョン | -| -------------- | ------------------------------------- | -| 空 | インストールされている Visual Studio の最新 | -| 15 | Visual Studio 2017 | -| 16 | Visual Studio 2019 | -| 2017 | Visual Studio 2017 | -| 2019 | Visual Studio 2019 | +| NUM_VSVERSION | 使用される Visual Studio のバージョン | +| -------------- | -------------------------------------- | +| (未定義) | インストールされている最新のバージョン | +| 15 | Visual Studio 2017 | +| 16 | Visual Studio 2019 | +| 17 | Visual Studio 2022 | ### 検索ロジック -1. `ARG_VSVERSION` から`VC++`のバージョン指定(`NUM_VSVERSION`)を判断する。 - 1. `ARG_VSVERSION` 未指定の場合、`15`が指定されたものとみなす。 - 1. `ARG_VSVERSION` が`2017`の場合、`15`が指定されたものとみなす。 - 1. `ARG_VSVERSION` が`2019`の場合、`16`が指定されたものとみなす。 - 1. `ARG_VSVERSION` が`latest`の場合、最新バージョンを取得する。 - 1. `ARG_VSVERSION` が上記以外の場合、`%ARG_VSVERSION%`が指定されたものとみなす。 -1. 指定されたバージョンのVC++がインストールされているかチェックする。 - 1. `vswhere -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath -version [%NUM_VSVERSION%, %NUM_VSVERSION% + 1)` を実行する。 - 1. 取得したパスが存在していたら、バージョン指定(`NUM_VSVERSION`)は正しいとみなす。 - 1. 取得したパスが存在していなかったら、最新バージョンを取得する。 -1. インストール済み`VC++`の最新バージョンを取得する。 - 1. `vswhere -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationVersion -latest` を実行する。 - 1. 取得したバージョンが指定されたものとみなす。(`NUM_VSVERSION`に代入する。) -1. 指定されたバージョンの`MsBuild.exe`を検索する。 - 1. `-find`オプションを付けて`MsBuild.exe`を検索する。(`vswhere -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe -version [%NUM_VSVERSION%, %NUM_VSVERSION% + 1)`) - 1. `vswhere` が VS2019 以降ver の場合、`MSBuild.exe` が見つかるので検索終了。 - 1. `vswhere` が VS2017 以前ver の場合、`MSBuild.exe` が見つからない(エラーになる)ので検索続行。 -1. VS2017 の `MsBuild.exe` を検索する。 - 1. VS2017 のインストールパスを検索する。(`vswhere -requires Microsoft.Component.MSBuild -property installationPath -version [15^,16^)`) - 1. VS2017 のインストールパス配下の所定位置(`%Vs2017InstallRoot%\MSBuild\15.0\Bin`)に`MSBuild.exe`が存在する場合、そのパスを `MSBuild.exe` のパスとみなす。 - この場合、バージョン指定(`NUM_VSVERSION`)に`15`が指定されたものとみなす。 +1. バッチファイルの引数をチェックする。 + 1. 引数が指定されていない場合、`NUM_VSVERSION`が定義されていればその値を、そうでなければ`latest`を指定したものとみなす。 + 2. 引数にプロダクトバージョン(例:`2019`)が指定されている場合は値をメジャーバージョンに変換する。 + `latest`を指定した場合は、実行環境にインストールされている最新のメジャーバージョンを取得する。 + 3. 指定したバージョンがインストールされているか確認し、見つからなければ引数の指定はなかったものとみなしてチェックをやり直す。 + 4. `NUM_VSVERSION`が指定されている場合に限り、設定されている値とここまでのチェックで見つかったバージョンが同じであるか確認する。 + もし異なっている場合は環境変数を初期化した上で引数チェックをやり直す。 +2. 引数チェックで決定したバージョンの MSBuild を探す。 + - Visual Studio 2017 が選択された場合 + - VS2017 のインストールパスを取得し、配下の所定位置に`MSBuild.exe`が存在する場合、そのパスを`MSBuild`のパスとして利用する。 + - CMakeのジェネレータ名を示す`CMAKE_G_PARAM`に`Visual Studio 15 2017`を設定する。 + - Visual Studio 2019 以降が選択された場合 + - Visual Studio Locator の`-find`オプションを利用して`MSBuild.exe`を検索し、見つかったパスを`MSBuild`のパスとして利用する。 + - `NUM_VSVERSION`と別途取得したプロダクトバージョンからCMakeのジェネレータ名を生成し、`CMAKE_G_PARAM`に設定する。 ### 参照 * https://github.com/Microsoft/vswhere From 2078f2653b86fd918eb35b227b2265f01f3c8293 Mon Sep 17 00:00:00 2001 From: Kohki Akikaze <67105596+kazasaku@users.noreply.github.com> Date: Tue, 1 Feb 2022 14:50:51 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3=E3=83=88=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/find-tools.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/find-tools.md b/tools/find-tools.md index be7c961e8c..4caae98260 100644 --- a/tools/find-tools.md +++ b/tools/find-tools.md @@ -53,19 +53,19 @@ MSBuild以外の探索手順は同一であり、7-Zipを例に説明する。 ### 検索ロジック 1. バッチファイルの引数をチェックする。 - 1. 引数が指定されていない場合、`NUM_VSVERSION`が定義されていればその値を、そうでなければ`latest`を指定したものとみなす。 - 2. 引数にプロダクトバージョン(例:`2019`)が指定されている場合は値をメジャーバージョンに変換する。 - `latest`を指定した場合は、実行環境にインストールされている最新のメジャーバージョンを取得する。 - 3. 指定したバージョンがインストールされているか確認し、見つからなければ引数の指定はなかったものとみなしてチェックをやり直す。 - 4. `NUM_VSVERSION`が指定されている場合に限り、設定されている値とここまでのチェックで見つかったバージョンが同じであるか確認する。 - もし異なっている場合は環境変数を初期化した上で引数チェックをやり直す。 + 1. 引数が指定されていない場合、`NUM_VSVERSION`が定義されていればその値を、そうでなければ`latest`を指定したものとみなす。 + 2. 引数にプロダクトバージョン(例:`2019`)が指定されている場合は値をメジャーバージョンに変換する。 + `latest`を指定した場合は、実行環境にインストールされている最新のメジャーバージョンを取得する。 + 3. 指定したバージョンがインストールされているか確認し、見つからなければ引数の指定はなかったものとみなしてチェックをやり直す。 + 4. `NUM_VSVERSION`が指定されている場合に限り、設定されている値とここまでのチェックで見つかったバージョンが同じであるか確認する。 + もし異なっている場合は環境変数を初期化した上で引数チェックをやり直す。 2. 引数チェックで決定したバージョンの MSBuild を探す。 - - Visual Studio 2017 が選択された場合 - - VS2017 のインストールパスを取得し、配下の所定位置に`MSBuild.exe`が存在する場合、そのパスを`MSBuild`のパスとして利用する。 - - CMakeのジェネレータ名を示す`CMAKE_G_PARAM`に`Visual Studio 15 2017`を設定する。 - - Visual Studio 2019 以降が選択された場合 - - Visual Studio Locator の`-find`オプションを利用して`MSBuild.exe`を検索し、見つかったパスを`MSBuild`のパスとして利用する。 - - `NUM_VSVERSION`と別途取得したプロダクトバージョンからCMakeのジェネレータ名を生成し、`CMAKE_G_PARAM`に設定する。 + - Visual Studio 2017 が選択された場合 + - VS2017 のインストールパスを取得し、配下の所定位置に`MSBuild.exe`が存在する場合、そのパスを`MSBuild`のパスとして利用する。 + - CMakeのジェネレータ名を示す`CMAKE_G_PARAM`に`Visual Studio 15 2017`を設定する。 + - Visual Studio 2019 以降が選択された場合 + - Visual Studio Locator の`-find`オプションを利用して`MSBuild.exe`を検索し、見つかったパスを`MSBuild`のパスとして利用する。 + - `NUM_VSVERSION`と別途取得したプロダクトバージョンからCMakeのジェネレータ名を生成し、`CMAKE_G_PARAM`に設定する。 ### 参照 * https://github.com/Microsoft/vswhere