使用MSBuild编译单个cpp文件

时间:2010-11-13 12:15:47

标签: visual-studio-2008 msbuild

我可以通过命令行调用MSBuild来构建整个项目:

C:\MyProject>MSBuild MyProject.vcproj

但是我没有找到有关编译单个文件的任何信息。 从本质上讲,我想做一些像

这样的事情
C:\MyProject>MSBuild MyProject.vcproj /t:Compile:MySourceFile.cpp

我不想直接从命令行使用'cl.exe',因为这会迫使我为cl.exe和所有环境变量定义所有相关的命令行选项,这是MSBuild已经为我做的一项任务

有没有办法实现这个目标?

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

2 个答案:

答案 0 :(得分: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并复制列出的所有内容)

答案 1 :(得分:0)

您可以这样做(这是当您在文件上按 Ctrl+F7 时 VS 调用 MSBuild 的方式):

msbuild MyProject.vcxproj /t:ClCompile /p:SelectedFiles=MySourceFile.cpp

请注意,SelectedFiles 属性需要与 .vcxproj 中的 <ClCompile> 项匹配,因此它可能更类似于 ..\path\to\MySourceFile.cpp,具体取决于您的文件的组织方式。