2010年07月11日

ECHO OFFはONされない

WindowsのCLIであるcmd.exeのお話。

Visual C++インストールして必要なライブラリも入れて、コマンドプロンプト上でも簡単にコンパイル出来るように環境変数を設定するBATファイルを作ろうと思い立った。

特に難しい何かがある訳じゃないので、さらさらさらっと……


REM @ECHO OFF
CALL "%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat" %*

REM Boost...
SET INCLUDE=C:\lib\Boost\boost-1_43;%INCLUDE%
SET LIB=C:\lib\Boost\lib;%LIB%

REM OpenSSL...
PATH C:\OpenSSL-Win32\bin\;%PATH%
SET INCLUDE=C:\OpenSSL-Win32\include;%INCLUDE%
SET LIB=C:\OpenSSL-Win32\lib;%LIB%

REM libcurl...
SET INCLUDE=C:\lib\curl-7.21.0-devel-mingw32\include;%INCLUDE%
SET LIB=C:\lib\curl-7.21.0-devel-mingw32\lib;%LIB%

VC++まわりの環境変数は、VC++が用意してくれているBATに一任。1行目の@ECHO OFFをコメントにしているのは動作確認の為である。

で、実行してみると……(以下分かりやすいようプロンプトも記述)


C:\WINDOWS>REM @ECHO OFF

C:\WINDOWS>CALL "C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\\..\..\VC\vcvarsall.bat"
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

え?あれ?vcvarsall.batのCALLした後に書いてたSET群は……?なんで呼び出されないの……?

という訳で、vcvarsall.batからそれから呼び出されている各種BATファイルまで延々調べる結果に。
やれEXIT/B無しで呼び出されているんじゃないかとか、:EOFってじつは呼び出し元に戻らないんじゃないかとか、いろいろ調べて頭ひねった。捻れた。ぐにょ。

で、さんざん悩んだあげく、vcvarsall.batの頭の@echo offの所為だという結論に。CALL先で@ECHO OFFされたら、CALL元で元に戻されたりしないのね。いや、環境変数の中身ちゃんと確認しないでうんうん唸ってた俺も悪いんだけどさ。

結論。
こういったBATファイル配る人は、ちゃんとケツで@ECHO ONしてください

ラベル:Windows CMD BAT
posted by 天井冴太 at 01:28| Comment(0) | TrackBack(0) | Other | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください

この記事へのトラックバック