簡體   English   中英

如何使用system()中的Visual Studio 2012命令行工具

[英]How to use the Visual Studio 2012 command line tool from system()

我試圖使用Visual Studio命令行工具中提供的msbuild和其他命令從另一個可視化C ++程序(project2)編譯和運行一個可視化C ++程序(project1),但不是在Windows命令行工具中。 如果我在visual studio命令行工具中運行它,一切正常。 例如,我可以使用msbuild構建它,它就像我想要的那樣工作。 當我嘗試使用system()在我的C ++程序中運行相同的命令時,系統調用似乎使用Windows命令行,因此無法找到任何命令(本例中為msbuild)。 我是新手在Windows上使用system()(雖然我有使用Linux的豐富經驗)。 當我調用系統(而不是Windows命令行環境)時,是否有某種方法可以使我的C ++程序使用Visual Studio命令行環境? 手動使用命令窗口不是一個選項。 我需要在project1中編譯和測試一系列200-300個不同版本的程序。 這就是我編寫program2的原因

從命令行獲取Visual Studio的關鍵是設置適當的環境。 您可能安裝了幾個不同的VS版本,因此您需要一種指定使用哪個版本的方法。 可能最簡單的方法是擁有一個間接級別,您可以在其中生成一個命令列表來設置所需的環境並將這些命令寫入批處理文件,然后調用system()來運行它。

如果您查看<visual studio>\\vc\\bin目錄,那么您將找到一個文件vcvars32.bat 這為為特定工具集設置環境提供了很多魔力。 我想那時你可以生成這樣的批處理文件:

call path\to\visualstudio\vc\bin\vcvars32.bat

msbuild myproject

請注意,您需要call語法從另一個調用一個批處理文件,否則會導致shell不返回。

  1. 通過查找以下注冊表項找到msbuild.exe:HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ MSBuild \\ ToolsVersions \\ 4.0 \\ MSBuildToolsPath
  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;
}

使用其中一個怎么樣?

%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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM