Visual Studio 2003および2005(そしておそらく私が知っている限りでは2008)では、コマンドラインユーザーが「Visual Studioコマンドプロンプト」で実行する必要があります。このコマンドプロンプトを起動すると、C++コンパイラclがコンパイル時に使用するさまざまな環境変数が設定されます。
これは常に望ましいとは限りません。たとえば、Ant内から「cl」を実行する場合、「Visual Studioコマンドプロンプト」内からAntを実行する必要はありません。 vcvars32.batによって設定された環境はclが実行された時点で失われるため、vcvars32.batの実行はオプションではありません(Ant内から実行している場合)。
Visual Studioコマンドプロンプト内から実行せずにclを実行する簡単な方法はありますか?
コンパイラは、他のコンパイラと同じようにコマンドライン(またはメイクファイル)から使用できます。注意する必要がある主なものは、INCLUDEおよびLIB環境変数、およびPATHです。 cmd.exeから実行している場合は、この.batを実行するだけで環境を設定できます。
C:\ Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
Makefile、Cygwin、MinGW、またはそのようなものからコンパイラーを使用しようとしている場合は、環境変数を手動で設定する必要があります。コンパイラがデフォルトの場所にインストールされていると仮定すると、これはVisual Studio 2008コンパイラと最新のWindows SDKで機能するはずです。
パスに追加:
含める:
LIBに追加:
これらは最低限のものですが、基本的なことには十分なはずです。 vcvarsall.batスクリプトを調べて、さらに設定する必要があるものを確認します。
独自のバッチファイル(clenv.batなど)を作成し、clの代わりにそれを呼び出します。
@echo off
:: Load compilation environment
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
:: Invoke compiler with any options passed to this batch file
"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" %*
clenv.batは、cl.exeと同じように呼び出すことができますが、最初に必要な環境変数を最初にロードする点が異なります。
変数を自分で設定するバッチファイルを実行するだけです。 VS08では、次の場所にあります。
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
Vcvars32またはvsvars32バッチファイルが行うことは、ロケット科学ではありません。それらは単に、PATH、INCLUDE、LIB、および場合によってはLIBPATH環境変数を、特定のコンパイラーのバージョンに適したデフォルトに設定するだけです。
あなたがしなければならないことは、それらの事があなたのAntまたはメイクファイルに対して適切に設定されていることを確認することです(それらを呼び出す前に、またはそれらの中に)。
INCLUDEおよびLIB/LIBPATHの場合、環境変数でこれらの項目を設定する代わりに、これらの設定を明示的なパラメーターとしてコマンドラインに渡すことができます。
Visual Studioコマンドプロンプトによって実行されるvcvarsall.batバッチファイルは、単にシステム環境変数とパスをきれいに維持しようとしています(複数のバージョンのVisual Studioがある場合は重要です)。
セットアップを1つのバージョンに制限し、パスと環境変数のセットが長い場合は、これらの設定を(手動で)システム環境変数(マイコンピューター|プロパティ---またはWin-Pause/Break)に転送します。
私はこれに対してもお勧めします!
コツは、常に正しいvcvarsバッチファイルを使用することです。 VisualStudioのバージョンが1つだけインストールされている場合、それは大きな問題ではありません。私のような複数のバージョンを扱っている場合、MSVC++ 15 vcvarsファイルでセットアップされたコンソールでMSVC++ 14ビルドを実行するのは非常に簡単になります。動作する場合と動作しない場合がありますが、取得するものは、VisualStudio内から構築するものとは異なります。
terp でその問題に対処しました。選択されたコンパイラから適切なvcvarsファイルを取得し、常にツール呼び出しに対して内部的に環境を設定しました。このようにして、使用しているコンパイラに適したvcvarsファイルが常にあります。
繰り返しになりますが、vcvarsファイルの機能を手動で複製しようとしないことを強くお勧めします。あなたは何かを逃すか、実際にあなたが望んでいたものとは少し異なる何かをしている間にそれが機能しているように見えるほど十分にそれを正しく得る必要があります。
visual-studio-201 でVisual StudioコマンドプロンプトのVisual Studioコマンドラインを開く私のバージョン。ライブラリ/プロジェクトをビルドし、結果のDLL=ファイルで追加の手順を実行するために内部的に使用されます。
これらの行をCompile and execute other steps.cmd
ファイルなどにコピーします。
@echo off
REM Load Visual Studio's build tools
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
REM Choose what you want to do, 1 or 2 by (un)commenting
REM 1. Add your cl.exe (or msbuild.exe or other) commands here
REM msbuild.exe MyProject.csproj
REM cl.exe
REM custom-step.exe %*
REM pause
REM 2. Open a normal interactive system command Shell with all variables loaded
%comspec% /k
このバージョンのスクリプトでは、その後、対話型コマンドラインモードに「とどまります」。 REM %comspec% /k
にコメントして、非対話的な目的でのみスクリプトを使用します。