2013-07-06 53 views
8

我使用的MSBuild在命令行建立一個生成的解決方案文件:力的MSBuild建設項目,該項目是在解決方案配置未選擇

msbuild /p:Configuration=Release /p:Platform=Win32 build\zlib\vc-9.0\x86\zlib.sln 

的問題是,由CMake的生成的解決方案有一個項目安裝的是不是默認生成的。

minigzip: 
    Die Datei "c:\Library\build\zlib\vc-9.0\x86\minigzip.tmp_Release_Win32.vcproj 
    " wird gelöscht. 
ALL_BUILD: 
    Die Datei "c:\Library\build\zlib\vc-9.0\x86\ALL_BUILD.tmp_Release_Win32.vcpro 
    j" wird gelöscht. 
INSTALL: 
    The project "INSTALL" is not selected for building in solution configuration 
    "Release|Win32". 
Done Building Project "c:\Library\build\zlib\vc-9.0\x86\zlib.sln" (default targ 
ets). 


Build succeeded. 
    0 Warning(s) 
    0 Error(s) 

如何在不手動打開soultion的情況下強制安裝目標INSTALL並設置配置複選框?

一種解決方案是直接調用vcproj文件(像我一樣在這裏)

msbuild /p:Configuration=Release /p:Platform=Win32 build\zlib\vc-9.0\x86\INSTALL.vcproj 

但這打印警告

Microsoft (R)-Buildmodul, Version 3.5.30729.6387 
[Microsoft .NET Framework, Version 2.0.50727.6400] 
Copyright (C) Microsoft Corporation 2007. Alle Rechte vorbehalten. 

Build started 06.07.2013 17:07:57. 
Project "c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj" on node 0 (default ta 
rgets). 
c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj : warning MSB4098: MSBuild is i 
nvoking VCBuild to build this project. Project-to-project references between VC 
++ projects (.VCPROJ) and C#/VB/VJ# projects (.CSPROJ, .VBPROJ, .VJSPROJ) are n 
ot supported by the command-line build systems when building stand-alone VC++ p 
rojects. Projects that contain such project-to-project references will fail to 
build. Please build the solution file containing this project instead. 
Done Building Project "c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj" (defaul 
t targets). 


Build succeeded. 

正如你所看到的,構建成功。我可以通過首先調用解決方案來確保構建正確,但我想強制解決方案也可以構建項目INSTALL。

任何想法?

+1

我很確定這是不可能的。你已經找到的解決方法似乎不夠好嗎?作爲替代你不能使用「cmake --build --target install」之類的東西嗎?我用cmake已經有一段時間了,但我似乎記得你可以讓它爲你調用msbuild等,而不是手動執行。 – stijn

+0

非常感謝,發佈這個答案,我會接受這是有效的解決方案。 – Beachwalker

回答

9

據我所知,這是不可能的。查看msbuild的命令行選項和解決方案文件,沒有什麼可以支持它。但是,由於您使用的是cmake,您可以使用它來爲您構建所有內容,而無需手動完成。我發現this thread基本上問同樣的問題,你和使用觀念有正確的語法已經我把它註釋:

cmake --build . --target install 

展望有所此外,從現在看來,這確實有在devenv cmmand行選項您需要的功能。這迫使某一項目的建設,即使它不是在配置管理器中啓用:

devenv build\zlib\vc-9.0\x86\zlib.sln /Build Release /project INSTALL 
+0

如果你想讓cmake在發佈模式下構建,你可能需要使用:「cmake --build。--target install --config Release」 – debris

+0

它適用於VS2008!先生非常感謝您! – agodinhost

+0

'devenv'技巧在VS2015中仍然有效。謝謝! – shoelzer

3

stijn's answer是建設目標,通過C進行「地道」的方式。

但請注意,MSbuild可以構建解決方案文件項目文件。您可以撥打msbuild ALL_BUILD.vcxproj,而不是撥打msbuild zlib.sln。您可以撥打msbuild INSTALL.vcxproj

+0

我已經做了(請參閱我的發佈代碼)。但是這引發了警告。 – Beachwalker

+1

@海灘行者。道歉...它應該適用於VS2010或更高版本。我沒有注意到你正在構建「pre-VS2008」vcproj文件... –

2

使用CMake版本3.2.2生成的解決方案確實無法通過解決方案從msbuild構建INSTALL目標。根本原因是,安裝目標,該解決方案只包含的條目類似在部分GlobalSection(ProjectConfigurationPlatforms):

{11C4D30A-3B6A-4350-BD7D-B343F3A843C0}.Debug|Win32.ActiveCfg = Debug|Win32 

如果添加如下條目:

{11C4D30A-3B6A-4350-BD7D-B343F3A843C0}.Debug|Win32.Build.0 = Debug|Win32 

然後就有可能用這樣的命令構建INSTALL目標:

msbuild <pathToProject>.sln /target:INSTALL 
相關問題