如何在命令行中只构建Visual Studio项目?

15
devenv mysolution.sln /build "Release|Win32" /project myproject

在命令行构建时,似乎我有执行 /build 或者 /rebuild 的选项,但是没有方法可以指定只做"项目本身" (即不会重新构建或者构建该项目依赖的其他项目)。 有人知道该怎么做吗?


可能是从命令行中构建解决方案中的一个项目的重复问题。 - StayOnTarget
6个回答

21

根据你的构建系统结构,这可能是你正在寻找的内容:

msbuild /p:BuildProjectReferences=false project.proj

当我们只在项目(而不是解决方案)文件的上下文中时,BuildProjectReferences=false 会有所区别吗? - Owen
1
谢谢,这对我有用! :) @Owen,如果你的vcxproj文件中有项目引用,它确实会起作用。 - Rami A.

10

MSBuild是您需要的东西。

MSBuild.exe MyProject.proj /t:build

3
不要调用devenv,而是使用通用的构建工具:
vcbuild subproject.vcproj "release|win32"

1
vcbuild相对于msbuild有什么优点或缺点吗? - Owen
3
对于C/C++项目,msbuild实际上作为子进程运行vcbuild。所以是和不是。 :) - Ben Straub

1

0

以下内容适用于在VS2010中构建单个C++项目:

call "%VS100COMNTOOLS%"\\vsvars32.bat
msbuild /detailedsummary /p:Configuration=Debug /p:Platform=x64 /t:build MY_ABSOLUTE_PATH.vcxproj

遗憾的是,你不能仅指定一个项目名称和解决方案文件来构建该项目(除非你可能向项目文件添加特殊配置)。


0

感谢您的回答。我从对msbuild的一些了解中发现它可以处理.sln文件而不是.vcproj文件;这样可以完成任务,而不必知道.vcproj文件的位置吗?

让我退后一步。我们有一个大型解决方案文件,我想要一个脚本来执行以下操作:

  1. 对整个解决方案进行/build
    (有时候会因为devenv没有做足够的构建工作,导致某些项目失败,因为上次构建以来更改的数量不够多。)
  2. 对于每个失败的项目,在其上执行/rebuild

当我到达第二步时,我只知道解决方案文件名和失败项目的名称(而不是文件名)。我可以轻松地使用grep/awk/等命令在.sln文件中进行映射,但我很好奇msbuild是否提供了直接执行此操作的方法。

理想情况下,我希望能够通过一个命令行给 msbuild 提供 .sln 文件以及所有需要重新构建的项目的名称。因为文件很大,并且加载时间较长,所以如果不可能实现这一点,那么手动找出所有项目文件名的选项可能更好,因为每次都加载解决方案文件会非常低效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接