Windows コマンド ライン ツールではなく Visual Studio コマンド ライン ツールで利用可能な msbuild およびその他のコマンドを使用して、あるビジュアル C++ プログラム (project1) を別のビジュアル C++ プログラム (project2) からコンパイルして実行しようとしています。Visual Studio コマンド ライン ツールで実行すると、すべて正常に動作します。たとえば、msbuild を使用してビルドすることができ、思いどおりに動作します。system() を使用して C++ プログラムで同じコマンドを実行しようとすると、システム コールが Windows コマンド ラインを使用しているように見えるため、どのコマンドも見つかりません (この例では msbuild)。私は Windows で system() を使用するのが初めてです (ただし、Linux を使用した経験は豊富です)。システム (Windows コマンド ライン環境ではなく) を呼び出すときに、C++ プログラムで Visual Studio コマンド ライン環境を使用する方法はありますか? コマンド ウィンドウを手動で使用することはできません。project1 内の一連の 200 ~ 300 の異なるバージョンのプログラムをコンパイルしてテストする必要があります。これが私がprogram2を書いている理由です
1595 次
3 に答える
1
コマンド ラインから Visual Studio をビルドするための鍵は、適切な環境をセットアップすることです。いくつかの異なる VS バージョンがインストールされている可能性があるため、使用するバージョンを指定する方法が必要です。おそらくこれを行う最も簡単な方法は、必要な環境をセットアップするためのコマンドのリストを生成し、それらをバッチ ファイルに書き込み、それsystem()
を実行するために呼び出します。
ディレクトリを調べると<visual studio>\vc\bin
、ファイルが見つかりますvcvars32.bat
。これにより、特定のツールセットの環境をセットアップする魔法の多くが実行されます。次に、次のようなバッチ ファイルを生成できると思います。
call path\to\visualstudio\vc\bin\vcvars32.bat
msbuild myproject
call
あるバッチ ファイルを別のバッチ ファイルから呼び出す構文が必要であることに注意してください。そうしないと、シェルが返されなくなります。
于 2013-11-04T16:52:33.483 に答える
1
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath のレジストリ キーを検索して、msbuild.exe を見つけます
- 上記のレジストリ キーのパスを使用して、PATH\msbuild.exe を呼び出します。
このアプローチでは、Visual Studio へのパスを知る必要はありません。実際、MSVS がインストールされていなくても機能します。[無料] .NET SDK 4.0 で十分です。
msbuild.exe を見つけて実行するコードの例を次に示します。
#include "windows.h"
#include "winreg.h"
#define MAXSZ 1024
int _tmain(int argc, _TCHAR* argv[])
{
HKEY key;
TCHAR path[MAXSZ];
DWORD dwSize = MAXSZ;
long result;
result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\4.0" ), 0, KEY_QUERY_VALUE, &key);
result = RegQueryValueEx(key, _T("MSBuildToolsPath"), 0, NULL, (LPBYTE)path, &dwSize);
wcscat_s(path, MAXSZ, _T("msbuild.exe"));
_wsystem(path);
return 0;
}
于 2013-11-04T17:31:12.377 に答える
0
これらのいずれかを使用するのはどうですか?
%windir%\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
%windir%\Microsoft.NET\Framework\v3.5\MSBuild.exe
%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
于 2013-11-04T21:51:34.957 に答える