-
Notifications
You must be signed in to change notification settings - Fork 163
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
MSBuildの探索手順を変更する #1785
MSBuildの探索手順を変更する #1785
Conversation
- 変数のローカル化をやめるタイミングの変更 - 探索処理では`ARG_VSVERSION`ではなく、値が確定している`NUM_VSVERSION`を参照する - インデントに使用する文字を揃える
#1763 に含まれる3つのコミットをcherry-pickして作成しました。 |
✅ Build sakura 1.0.4016 completed (commit a4fe340ed2 by @kazasaku) |
やっぱりなんかしら対応が必要ですよね。 そうじゃないかと思ってました。 #1763 を見返してみたら、かなりgdgdな印象を受けました。 |
Kudos, SonarCloud Quality Gate passed! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
良さそうに見えます。
ビルドスクリプトは、なんかあったら「何かおかしい」が比較的すぐに分かるので入れてしまえばよいと思います。
レビューありがとうございます。マージしてしまいます。 |
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
参考資料