Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR の目的
#1763 に含まれるfind-tools.batの仕様変更を取り込みます。
カテゴリ
PR の背景
#1755 を発端とした「find-tools.batの探索ロジック」の話題に関して、複数のVSが混在している場合に生じる次のような事例を #1759 (話題をissueに分割しています)で報告しました。
GoogleTestのコンパイル実施時、googletest.build.cmdを呼び出すときに設定した
NUM_VSVERSION
環境変数(中身はVisualStudioVersion
の値)が反映されないというものです。Originally posted by @kazasaku in #1759 (comment)
#1763 に含まれている変更でこのような事象を回避できることが確認できましたので、masterへの取り込みを提案するものです。
PR のメリット
NUM_VSVERSION
環境変数に設定する値を間違えない限り、設定したバージョンが確実に選択されます。PR のデメリット (トレードオフとかあれば)
仕様・動作説明
変更点一覧
NUM_VSVERSION
の値を考慮するようになりました。ARG_VSVERSION
の値は利用しないようになりました。15 (VS2017)
からlatest
に変更しました。CMAKE_G_PARAM
)の生成方法を見直しました。動作
従来MSBuildの探索時に実施していた引数チェックは、独立したサブルーチンとして探索処理の実施前に行うようになりました。次のように動作します。
NUM_VSVERSION
が定義されていればその値を利用し、そうでなければ「latest」を指定したものとみなします。「latest」を指定した場合は実行環境にインストールされている最新のメジャーバージョンを取得します。
NUM_VSVERSION
が指定されていた時は、その値とここまでのチェックで見つかったバージョンが同じであるか確認し、異なる場合は環境変数を初期化した上で引数チェックをやり直します。MSBuildの探索とCMakeジェネレータ名の生成プロセスは次のように動作します。
NUM_VSVERSION
の値が15
(VS2017)の場合Visual Studio 15 2017
(固定値)を設定します。NUM_VSVERSION
の値が15
以外の場合vswhere
コマンドの-find
オプションを使用して、選択したバージョンのMSBuild.exeへのパスを取得します。NUM_VSVERSION
の値と取得したプロダクトバージョン(例:2019
)からジェネレータ名を生成します。そのほか
#1763 そのままでは支障があったため、次の修正を加えています。
endlocal
の呼び出しタイミングの変更ARG_VSVERSION
ではなく、引数チェックで確定したNUM_VSVERSION
の値を参照するようにします。この変更に伴うドキュメントの更新は別途実施します。【2022-02-01 追記】ドキュメント更新も実施します。
PR の影響範囲
テスト内容
NUM_VSVERSION
を定義していないか、無効なバージョンを設定している状態で、NUM_VSVERSION
も含めて削除されることNUM_VSVERSION
に有効なバージョンを設定した状態で、NUM_VSVERSION
に指定したバージョンのVSが選択されることNUM_VSVERSION
に指定したバージョンのVSが選択されることNUM_VSVERSION
も含めて削除されることARG_VSVERSION
をあらかじめ定義した状態で実行し、その値が反映されていないこと関連 issue, PR
#1755
close #1759
#1763
#1764
参考資料