メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • rlib-MML WebApp
  • MML (Music Macro Language) をコンパイルし、再生やファイル出力(MP4、標準MIDIファイル)をブラウザ上で行えます。
  • Magome
  • クラウドベースのMIDIシーケンサ
    音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています。
twitter
  
現: 2019-11-04 (月) 21:05:15 takatsuka ソース
Line 1: Line 1:
 +開発の現場では作業の敷居を上げないために、シンプルな開発環境構築手順ってとても大事だと思います。
 +外部ライブラリであっても、このサイトからダウンロードしてビルドして出来上がったファイルはココに置いてパスを通して・・・みたいなことを各開発者に強いるのはなるべく避けたい。
 +Clone(Checkout)した後に、このスクリプトだけ叩けばOK!くらいまでシンプルだと理想だなと思います。
 +
 +昨今は色々な言語でパッケージ管理ツール的なものが一般的に使われてると思うのですが、C++ 界隈ではソースをダウンロードして自分で手作業でビルドするものが多々あり、windows の場合は VC のプロジェクトファイルをビルドすべしっていうものがけっこうあります。
 +
 +そこで必要になるのが VC プロジェクトをコマンドラインでビルドするために必要な MSBuild.exe。
 +
 +がしかし困ったことに MSBuild.exe の配置場所(パス)って固定ではありません。環境事にバラバラです。
 +で、それを解決する為に(かどうかはわかりませんが) VisualStudio では vswhere.exe っていうのがあり、それを叩けば MSBuild.exe のパスが取れるよ。というような記事を目にしたことがあります。
 +
 +なので、vswhere.exe を叩いておくようにすれば VisualStudio をバージョンアップしてもちゃんと動くんだろうからコレを使っておこう。と安心していたんですが、VisualStudio2019 をインストールしたら、MSBuild.exe のパスが取れなくなってしまいました。
 +さすがに、「このプロジェクトでは VisualStudio2017 を使うので 2019 はインストールするべからず!」みたいな開発環境ルールは避けたいので、VisualStudio2019 がインストールされている環境でも期待通り MSBuild.exe を叩ける bat を用意したので備忘録兼ねて載せておきます。
 +
 +ネット上の情報をかき集めた知識でこさえてみました。感謝です。
 +
 +#contents
 +
 +* 使い方 [#h583eb2d]
 +#prettify{{
 +> MSBuild.bat c:\app\app.vcxproj
 +}}
 +こんな感じで使うと、インストールされている最新の MSBuild.exe でビルドを行います。
 +
 +VisualStudio2019、2017、2015 の環境までは確認しています。
 +
 +* MSBuild.bat [#tbfcdbcc]
 +
 +#prettify{{
 +:: MSBuild.exe %*
 +
 +@echo off
 +setlocal
 +:: cd /d %~dp0
 +
 +set PF32=%ProgramFiles(x86)%
 +if not exist "%PF32%" set PF32=%ProgramFiles%
 +
 +set VsWherePath="%PF32%\Microsoft Visual Studio\Installer\vswhere.exe"
 +
 +:: vs2019 or later
 +for /f "usebackq tokens=*" %%i in (`%VsWherePath% -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe`) do (
 +    if exist "%%i" (
 +     set MSBuildPath="%%i"
 +     goto :run
 +    )
 +)
 +
 +:: vs2017 or earlier
 +for /f "usebackq tokens=1* delims=: " %%i in (`%VsWherePath% -latest -requires Microsoft.Component.MSBuild`) do (
 +    if /i "%%i"=="installationPath" (
 +     if exist "%%j\MSBuild\15.0\Bin\MSBuild.exe" (
 +     set MSBuildPath="%%j\MSBuild\15.0\Bin\MSBuild.exe"
 +     goto :run
 +     )
 +     if exist "%%j\MSBuild\14.0\Bin\MSBuild.exe" (
 +     set MSBuildPath="%%j\MSBuild\14.0\Bin\MSBuild.exe"
 +     goto :run
 +     )
 +     if exist "%%j\MSBuild\12.0\Bin\MSBuild.exe" (
 +     set MSBuildPath="%%j\MSBuild\12.0\Bin\MSBuild.exe"
 +     goto :run
 +     )
 +    )
 +)
 +
 +:run
 +if not exist %MSBuildPath% (
 +    echo "MSBuild.exe not find"
 +    exit /b 1
 +)
 +
 +echo on
 +%MSBuildPath% %*
 +}}
 +
 +*** 備考 [#ac84f756]
 +VisualStudio2019 の vswhere.exe には -find っていうオプションが追加されたようで、それを使うのが王道らしいので、それを使っています。
 +が、当然 VisualStudio2019 が未インストールの環境では、-find を指定してもエラーになります。
 +で、エラーが返ってきてもファイルの有無チェックで弾くことで VisualStudio2019 未満向けの処理に流れるっていう寸法です。
 +あんまりスマートじゃないやり方な気がしますが、他に妙案が思いつかないです・・。
 +もしもっと良い方法があればご助言頂けると幸いです。
  

  • 技術系備忘録/C++/VisualStudio/MSBuild.exeのパスを解決して実行 のバックアップ差分(No. All)

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 9284, today: 6, yesterday: 4