我可以通过命令行调用MSBuild来构建整个项目:
C:\MyProject>MSBuild MyProject.vcproj
但是我没有找到有关编译单个文件的任何信息。 从本质上讲,我想做一些像
这样的事情C:\MyProject>MSBuild MyProject.vcproj /t:Compile:MySourceFile.cpp
我不想直接从命令行使用'cl.exe',因为这会迫使我为cl.exe和所有环境变量定义所有相关的命令行选项,这是MSBuild已经为我做的一项任务
有没有办法实现这个目标?
请不要建议使用'make'或'ant'或其他什么,我特别需要MSBuild。 感谢
答案 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
,具体取决于您的文件的组织方式。>