0

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を書いている理由です

4

3 に答える 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
  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath のレジストリ キーを検索して、msbuild.exe を見つけます
  2. 上記のレジストリ キーのパスを使用して、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 に答える