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 | このブログの読者になる | 更新情報をチェックする
投票お願いします 人気blogランキング - 投票する
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

コメント欄右下をドラッグ&ドロップすると、コメント欄の拡大縮小が出来ます。
認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

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

この広告は180日以上新しい記事の投稿がないブログに表示されております。