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
してください。