【问题标题】:Using MSBuild to compile a single cpp file使用 MSBuild 编译单个 cpp 文件
【发布时间】:2010-11-13 12:15:46
【问题描述】:

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

C:\MyProject>MSBuild MyProject.vcproj

但是我没有找到任何关于编译单个文件的信息。 本质上我想做类似的事情

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

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

有什么方法可以实现吗?

请不要建议使用“make”或“ant”或其他任何东西,我特别需要 MSBuild。 谢谢

【问题讨论】:

标签: visual-studio-2008 msbuild


【解决方案1】:

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 并复制列出的所有内容)

【讨论】:

  • devenv 来自哪里?
  • @ar2015 它是 Visual Studio 可执行文件的名称。启动 Visual Studio 命令提示符时,它将位于您的 PATH 中。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多