2010-11-13 105 views
8

我可以从命令行调用的MSBuild编译整个项目:使用的MSBuild编译一个CPP文件

C:\MyProject>MSBuild MyProject.vcproj 

但是我没有找到有关编译单个文件的任何信息。 在本质上,我想这样做

C:\MyProject>MSBuild MyProject.vcproj /t:Compile:MySourceFile.cpp 

我不想直接使用“cl.exe时”的命令行,因为这将迫使我定义cl.exe时所有相关的命令行选项和所有的环境变量,MSBuild已经为我做的任务。

有什么办法可以达到这个目的吗?

请不要使用'make'或'ant'或其他什么,我特别需要MSBuild。 谢谢

+0

潜在的有趣的[C#选项](http://blogs.msdn.com /b/dotnetinterop/archive/2008/04/08/msbuild-script-for-compiling-all-cs-files-into-a-single-assembly-dll-or-exe.aspx)。因人而异。 – ruffin 2014-09-25 15:09:15

回答

8

VS2008中的MSBuild使用VCBuild来完成实际的工作,而VCBuild没有我知道的构建单个文件的选项。 (在VS2010中,这已经发生了变化,您可以使用类似于"/t:ClCompile "p:/SelectedFiles="main.cpp"的方式调用单个文件的编译)

我可以想出一些肯定会起作用的想法,但需要一些额外的工作,而且不是非常简单:

  • 可以MSBuild的有无调用devenv的编译单个文件:

    devenv myproject.sln /Command "File.OpenFile myfile.cpp" /Command "Build.Compile" /Command "File.Exit" 
    

    这样做虽然打开IDE窗口,将使其非常难以弄清楚,如果编译居然成功与否。

  • 让msbuild调用一个脚本/程序,该脚本/程序解析vcproj并删除源文件部分下的所有源的副本,但要删除一个文件。然后让msbuild使用vcbuild/pass1构建该项目(pass1 =仅编译,无链接)。

  • 始终保持响应文件与您的vcproj具有相同的选项,并让msbuild使用响应文件调用cl来编译单个文件。 (使得响应文件与在VS中打开项目属性一样简单,转到C++ - > CommandLine并复制列出的所有内容)