2018年4月23日月曜日

Visual Studio 2017(それ以前も)のIDEからはビルドイベントにbash(を含む64bitなコマンド)は使えない

小一時間も悩んであまりにも当たり前なことに気づいてしまった瞬間、そのあまりの恥ずかしさに悶絶したのでここに記録する次第です。

※ここで言うビルドイベントとは、例の「ビルドイベント[前|後]のコマンドライン」を指しています。
※bashとはWindows Subsystem for Linux(旧Bash on Ubuntu on Windows)のbashを指しています。

結論から申し上げます。
bashだけでなく、64bit向けにビルドされたあらゆるコマンドが使えません。

当たり前ですよね。
Visual StudioのIDEに64bit版なんかないんですから。
bashは64bit版しかないんですから。

呼べるわけないですよね!!!

以上です。
以下タワゴトです。

とあるプログラムの前処理にbash経由でperlを使いたいと思いました。
それを行うバッチを書いて、手動で起動するとばっちりでしたので、ビルドイベント前のコマンドラインとして設定しました。
そしてビルドすると・・・
1>  'bash' は、内部コマンドまたは外部コマンド、
1>  操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と、こういうエラーが吐出されました。

面食らった私は以下のように思いました。
  1. は?
  2. ないの??
  3. ないわけないでしょ???
  4. なんでみえないの????
  5. タスクスケジューラとかでも使えてるのに?????(←何の関連もない)
そこで、フルパスでC:\Windows\System32\bash.exeとか指定したりしたのですがやっぱりエラー内容が変わりません。

そもそも、ここで気づけばよかったんですよね。
エラーメッセージは見えないとかないとか一言も言ってなくて、「認識されていません」ときちんと正しい日本語で教えてくれているのでした。
それを勝手に勘違いしてなぜbashが見えないのだ~~~と悶えた挙句、そういえばIDEって32bit版だったよな~、ということを思い出して(時間経過を無視すれば)あっさり終了。
実行環境とアーキテクチャが違うバイナリ持ってくんなバカ、と叱られていたのにそれに気づけない間抜けさが身に沁みます。

ちなみに、そのバッチ内で
echo %PROCESSOR_ARCHITECTURE%
とやると、キッチリx86と表示されました。当たり前ですが。
(64bit環境下だと環境変数PROCESSOR_ARCHITECTUREにはAMD64が入っています)

あまりの自分のふがいなさに、ちょっと鼻血が出そうになりました。

IDEの前処理欄を使用するといろいろ都合がよかったので、結局perlで書いたスクリプトはcsharpで書き直してしまいました。
当ブログの趣旨に沿った行動ができました。心からハズカシイです。

0 件のコメント:

コメントを投稿