ビルド前イベントで環境変数を設定し、コンパイル手順で使用する
質問
Visual Studio 2003では、コンパイル手順で使用されるビルド前イベントで環境変数を設定しようとしていますが、値が伝播されていないようです。たとえば、ビルド前イベントにこれが含まれている場合(直接またはバッチファイル内):
set MY_LIB_VERSION=1.0.0
and AdditionalIncludeDirectoriesには次のものがあります:
c:\path\to\library\my_lib_v$(MY_LIB_VERSION)\include
その後、my_lib_v1.0.0
ディレクトリが存在する場合、コンパイルが機能することを期待します。しかし、代わりに、私は得る
c:\path\to\prog\my_prog.c(22) : fatal error C1083: Cannot open include file: 'my_lib.h' Project : warning PRJ0018 : The following environment variables were not found: $(MY_LIB_VERSION)
したがって、ビルド前イベントで設定された環境変数がコンパイル手順に伝播されていないと推測しますが、何かが欠落している可能性があります。
ビルド前イベントで環境変数を設定し、コンパイル手順で使用するにはどうすればよいですか
(または、ライブラリバージョンを1回定義し、AdditionalIncludeDirectoriesとAdditionalLibraryDirectoriesで複数回使用する他の賢明な方法でも同様に実行できます。)
更新:私は問題を別の方法で解決することになりました。 Subversionを使用し、プロジェクトソースのサブディレクトリにsvn:externals
プロパティを設定して、プロジェクトのチェックアウトがさらにdependencies
をチェックアウトし、作業コピーで<svn_path>\libraries\my_lib_v1.0.0
を呼び出すようにします。次に、プロジェクト設定はdependencies\my_lib
などを参照できます。 dependencies\my_lib\include
のバージョン1.0.1へのアップグレードは、my_lib
プロパティを編集するだけです。コードとプロジェクトの設定を変更する必要はありませんでした。
解決
このツールを調査することをお勧めします。 http://workspacewhiz.com/SolutionBuildEnvironmentReadme.html
常にビルド環境の環境変数を管理するために使用します。
他のヒント
ビルド前のステップで環境変数を設定しようとしたことは一度もないことを認めなければなりません。なぜそれが必ずしも機能しないのかがわかります(バッチファイルを実行すると、別のプロセスがトリガーされる可能性が高くなりますが、 d親プロセスの環境を操作したい)
私が使用してきた回避策ですが、Visual Studioを起動する前に必要な設定を決定できる場合にのみ機能します。必要な環境変数を設定し、適切なソリューションでVisual Studioを開始するバッチファイルを作成しますファイル。このバッチファイルのスケルトンを以下に再現しました。
REM
REM Set up VS environment with defaults (this is for 2008) - need to do this first
REM
call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
REM
REM Set the environment variables required by the project
REM
set BOOST_BASE=C:\Boost\include\boost-1_35
REM
REM If you need to manipulate the path, do it here
REM
REM
REM Finally, start VS with the appropriate solution file
REM
devenv MyProjectWithBoost.sln
SETコマンドを使用して設定される環境変数は一時的なものであり、設定されているプロセスの存続期間中のみ有効です。プロセスの有効期限が切れるとすぐに有効期限が切れます-他のプロセスからは見えません。
Visual Studioのビルド前イベントは別のプロセスです。そのプロセスが期限切れになると、その環境変数は消滅します。
環境変数があなたの望むものであると確信していますか?中央ネットワークの場所に保持されているテキストファイルに値を設定することでこれを行うことができますか?
EDIT :Windowsで環境変数を永続的に変更したい場合は実行できますが、SETを呼び出すのではなく、Windows APIを呼び出す必要があります。例えば。 http://code.activestate.com/recipes/416087/
グーグルを試してください環境変数ウィンドウが持続する