トップ | puarts.com
ロゴ
「バッチファイル」に関連する記事一覧
0  
以前、Visual Studioを使うときに環境変数を設定するバッチファイルを記述して、Visual Studioの起動オプションに/useenvをつけると、IncludeパスやLibパスなどに設定された環境変数の値をそのまま使用できてとても便利だという記事を書きましたが、この環境変数設定のバッチファイルの書き方について一番スマートな書き方はどんなものかを考えてみました。

まず、設定するパスにどのような共通点があるかということを考えてみます。
環境変数のPath, Include, Libの設定は次のようなパスになることが多いです。

Path:    ライブラリパス\bin
Include: ライブラリパス\include
Lib:     ライブラリパス\lib

つまり、ライブラリパス群をforループで回して、これらのパスを設定するようなスクリプトを書けば新しいライブラリのパスを追加したいときにわざわざPath, Include, Libの環境変数を設定するスクリプトを記述しなくて済みます。

バッチファイルでforループを使いながら変数を設定する場合に注意しなければならないのが、普通に記述すると環境変数の即時展開により、バッチファイルが読み込まれた時点で環境変数の設定が行われてしまうということです。これを回避するために遅延環境変数というものを使います。

次のようにsetlocal ENABLEDELAYEDEXPANSIONというコマンドを実行するとendlocalがある行までの環境変数の設定が遅延環境変数で行われるため、コマンドの実行時に変数の設定が行われるようになります。変数の使用時には%変数名%ではなく!変数名!とします。


setlocal ENABLEDELAYEDEXPANSION



...



endlocal



詳しくは下記のサイトがわかりやすかったので参照して下さい。

http://f32.aaa.livedoor.jp/~kobun/index.php?CMD.EXE%A4%CE%C3%D9%B1%
E4%B4%C4%B6%AD%CA%D1%BF%F4%A4%CE%C5%B8%B3%AB



以下が最終的なバッチファイルの例になります。環境変数を上記の方法で設定してVC++ 2010を起動するバッチファイルです。


@echo off

setlocal ENABLEDELAYEDEXPANSION



rem Define Library Path -------------- 

set LibList=C:\Qt4.7.1 C:\DevIL C:\OpenCV2.2



rem Set Environment Variables -------- 

for %%p in (%LibList%) do (

        set Path=%%p\bin;!Path!

        set Include=%%p\include;!Include!

        set Lib=%%p\lib;!Lib!

)

set SourcePath=%Include%



rem Execute VC++ --------------------- 

set VCCommonDir=C:\Program Files (x86)\^

Microsoft Visual Studio 10.0\Common7

call "%VCCommonDir%\Tools\vsvars32.bat"

devenv.exe /useenv



endlocal



このようにバッチファイルを書いておけば、新しいライブラリのパスを追加したいというときにLibListに新しいライブラリのパスを追加するだけで済み、管理がとても楽になるのでおすすめです。
0  

0.0254 sec
にほんブログ村 ゲームブログ ファイアーエムブレムへ にほんブログ村 デザインブログ コンピュータグラフィックスへ

Copyright(C)2006-2018 wsp All Rights Reserved