3

makefile (GNU Make) を使用して、コマンド ラインで Visual C++ Express を使用してプログラミングしています。これを機能させるには、Visual Studio バッチ ファイルvsvars32.batを呼び出して環境をセットアップする必要があります。これは、make を使用する前に、新しい cmd.exe を開くたびに実行する必要があります。メイクファイルからバッチファイルを呼び出そうとすると、その後の環境は同じであるため、明らかにバッチファイルが独自のプロセスとして実行されます。

私の質問: Linux/Unix bashの組み込みソースコマンドのように、cmd.exe でスクリプトを実行する方法はありますか? もちろん、Windowsにbashをインストールすることは別として。

自分の回答を投稿した後に編集します。

上記の質問は正しくありません。次のようにする必要があります。

Makefile 内から環境を変更するバッチ ファイルを呼び出して、変更された環境が Makefile で呼び出される他のプログラムに適用されるようにすることはできますか?

元の質問に対する答えは「はい」です。cmd.exe の組み込みのcallコマンドを使用できます。ただし、callは組み込みコマンドであり、実際のプログラムではないため、別のバッチ ファイルからバッチ ファイルを呼び出す場合にのみ、makefile では機能しません。

4

6 に答える 6

4

以前の回答からコンパイルされた回答:

以下を含む make.bat というバッチファイルを作成しました。

"%VS90COMNTOOLS%vsvars32.bat"
を呼び出す make.exe %* を呼び出す

これは仕事をします。しかし、makefile 内から環境を変更するバッチ ファイルを呼び出して、変更された環境が makefile で呼び出された他のプログラムに対して持続するようにすることは、不可能に思われます。

編集: vsvars32.bat を繰り返し呼び出して PATH 変数をオーバーフローさせた後、次の変更を加えました。

"%VISUALCVARS%" == "TRUE" でない場合 (
VISUALCVARS=TRUE を設定し
、 "%VS90COMNTOOLS%vsvars32.bat"を呼び出します
)
make.exe %* を呼び出します

于 2009-01-16T15:17:41.693 に答える
1

少なくとも私の Visual Studio のインストールでは (やや古い VS .NET 2003 ではありますが)、VS スタート メニュー グループのリンクの 1 つは、環境が既にセットアップされている cmd.exe インスタンスを開くことです。以下が役立つ場合があります。

これらは、IDE からコマンド プロンプトを起動することを目的としていますが、目的に役立つ適切な環境でコマンド プロンプトを起動するための情報も含まれています。

于 2009-01-16T12:36:18.603 に答える
1

「コール」を使用します。

@echo off
pushd.
call "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars3235.bat"
msbuild LinqSupportClassesSDKBuild.csproj /t:rebuild /p:Configuration=Release /nologo /v:q /clp:ErrorsOnly;
popd

これは、linq プロバイダーを構築するために使用する cmd ファイルです。

于 2009-01-16T11:39:06.677 に答える
1

コンソールをどのように起動しますか? 「cmd」を起動するだけの場合は、代わりに実行するショートカットを作成します (%comspec% は c:\windows\cmd.exe またはシステムに関連するものに解決されます)。

%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86

明らかに、適切なインストール フォルダーを指すようにパスを変更します。より一般的には、上記のポスターが指摘したように、.cmd ファイルが別の .cmd ファイルを別のプロセスとして起動するのではなく処理する必要がある場合は、'call' バッチ コマンドを使用します。

于 2009-01-16T12:53:31.547 に答える
0

GNU make をスクリプト (mmake.bat) にラップします。パスのどこかにスクリプトを配置します。

スクリプト自体は、vsvars32.bat を実行してから、次のように作成する必要があります。

vsvars32.bat
make %*

私が覚えている限りでは、このような別のスクリプトからのスクリプトの呼び出しは、同じシェル内で行われます (Bash の "." コマンドに似ています)。

于 2009-01-16T14:11:15.510 に答える
0

この問題に対する 3 つの解決策を見つけました。

1) バッチ ファイルによって設定される環境変数が静的である (つまり、常に同じ値である) 場合は、ユーザー プロファイル全体に対してそれらの値を設定します。[マイ コンピュータ] を右クリックし、[プロパティ] --> [詳細設定] --> [環境変数] をクリックします。バッチ ファイルの変数を [ユーザー変数] または [システム変数] セクションに追加します (ユーザー変数は自分だけに表示され、システム変数はそのコンピューターのすべてのユーザーに表示されます)。

2) 環境設定スクリプトを呼び出してから Makefile を呼び出すラッパー バッチ ファイルを作成します。

3) SET コマンドを使用してバッチ ファイルに環境変数を設定する代わりに、SETX コマンドを使用します (Windows リソース キットが必要です)。SETX は、レジストリ内のマスター環境に変更を加え、将来起動されるすべてのコマンド プロンプトで有効になることを除いて、SET に似ています (ただし、現在のコマンド プロンプトではありません)。

于 2009-06-23T17:52:37.943 に答える