使用msbuild在同一解决方案中从另一个C ++项目构建C ++项目

时间:2013-08-07 06:49:02

标签: visual-c++ compilation msbuild projects-and-solutions

我在msdn中看到很多页面,解释了如何使用msbuild从命令行构建C ++项目。但是可以使用msbuild从另一个C ++项目的代码中构建一个C ++项目吗?

更具体一点:在C ++解决方案中,我有2个项目(exe,dll)。是否可以通过msbuild在运行时从exe项目构建dll项目,然后加载dll并调用dll的一个函数?

我需要这个,因为我需要在运行时更改dll项目的代码,构建它并在运行时调用它的函数。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

例如,调用CreateProcess(使用msbuild 4):

#include <windows.h>
#include <string>
#include <iostream>

bool RunMsBuild( const char* args )
{
  STARTUPINFO startupInfo;
  PROCESS_INFORMATION procInfo;
  memset( &startupInfo, 0, sizeof( startupInfo ) );
  memset( &procInfo, 0, sizeof( procInfo ) );

  std::string cmdLine( "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild.exe " );
  cmdLine += args;

  if( !CreateProcessA( 0, const_cast< char* >( cmdLine.c_str() ),
        0, 0, FALSE, 0, 0, 0, &startupInfo, &procInfo ) )
    return false;
  WaitForSingleObject( procInfo.hProcess, INFINITE );
  DWORD dwExitCode;
  GetExitCodeProcess( procInfo.hProcess, &dwExitCode );
  CloseHandle( procInfo.hProcess );
  CloseHandle( procInfo.hThread );
  return dwExitCode == 0;
}

int main()
{
  if( RunMsBuild( "full\\path\\to\\ptojectfile /t:Build" ) )
    std::cout << "ok";
  else
    std::cout << "not ok";
  std::endl;
}