2013-07-06 30 views
8

tôi sử dụng msbuild tại dòng lệnh để xây dựng một tập tin giải pháp tạo:Force msbuild để xây dựng một dự án mà là không được chọn trong giải pháp cấu hình

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

Vấn đề là giải pháp tạo ra bởi cmake có một dự án INSTALL là không được xây dựng theo mặc định.

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) 

Làm cách nào để buộc mục tiêu CÀI ĐẶT được xây dựng mà không tự mở linh hồn và đặt hộp kiểm cho cấu hình?

Một giải pháp là để gọi các tập tin vcproj trực tiếp (như tôi đã làm ở đây)

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

nhưng điều này sẽ in cảnh báo

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. 

Như bạn có thể thấy, việc xây dựng thành công. Tôi có thể đảm bảo việc xây dựng chính xác bằng cách gọi giải pháp trước, nhưng tôi muốn cũng buộc giải pháp để xây dựng dự án CÀI ĐẶT.

Bất kỳ ý tưởng nào?

+1

Tôi chắc chắn điều này là không thể. Và cách giải quyết bạn đã tìm thấy có vẻ đủ tốt không?Là một thay thế, bạn không thể sử dụng một cái gì đó như "cmake - build - target targeting"? Nó được một lúc kể từ khi tôi sử dụng cmake nhưng tôi dường như nhớ bạn có thể có nó gọi msbuild vv cho bạn thay vì làm nó bằng tay. – stijn

+0

cảm ơn rất nhiều, đăng câu trả lời này và tôi sẽ chấp nhận giải pháp này là hợp lệ. – Beachwalker

Trả lời

9

Theo như tôi biết điều này là không thể. Nhìn vào các tùy chọn dòng lệnh của msbuild và trong tệp giải pháp, không có gì để hỗ trợ nó. Nhưng kể từ khi bạn đang sử dụng cmake, bạn có thể sử dụng nó để xây dựng tất cả mọi thứ cho bạn mà không cần phải làm điều đó bằng tay. Tôi thấy this thread mà về cơ bản đưa ra câu hỏi tương tự như bạn, và có cú pháp đúng bằng ý tưởng đã được tôi đặt nó bình luận:

cmake --build . --target install 

Nhìn hơi hơn nữa, từ các tùy chọn dòng devenv cmmand có vẻ như nó không có chức năng bạn đang theo dõi. Điều này buộc một xây dựng của dự án trao ngay cả khi nó không được kích hoạt trong quản lý cấu hình:

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

nếu bạn muốn cmake xây dựng trong chế độ phát hành, bạn có thể muốn sử dụng: "cmake --build. --target install --config Release" – debris

+0

Nó hoạt động cho VS2008! Cảm ơn ngài rất nhiều! – agodinhost

+0

Mẹo 'devenv' vẫn hoạt động trong VS2015. Cảm ơn! – shoelzer

3

stijn's answer là "thành ngữ" cách mục tiêu xây dựng thông qua cmake.

Lưu ý rằng MSbuild có thể xây dựng cả hai tệp giải pháp tệp dự án. Thay vì gọi số msbuild zlib.sln, bạn cũng có thể gọi msbuild ALL_BUILD.vcxproj.

Tương tự, bạn có thể gọi msbuild INSTALL.vcxproj.

+0

Tôi đã làm (xem mã đã đăng của tôi). Nhưng điều này ném cảnh báo. – Beachwalker

+1

@Beachwalker. Xin lỗi ... Nó sẽ hoạt động với VS2010 trở lên. Tôi không nhận thấy rằng bạn đang xây dựng các tệp vcproj "pre-VS2008" ... –

2

Sử dụng giải pháp được tạo bởi CMake phiên bản 3.2.2, thực sự không thể xây dựng mục tiêu INSTALL từ msbuild thông qua giải pháp. Nguyên nhân sâu xa là cho INSTALL mục tiêu, giải pháp duy nhất chứa các mục như những người trong phần GlobalSection (ProjectConfigurationPlatforms):

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

Nếu bạn thêm các mục như thế này:

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

Sau đó, nó trở thành có thể để xây dựng mục tiêu CÀI ĐẶT với một lệnh như sau:

msbuild <pathToProject>.sln /target:INSTALL 
Các vấn đề liên quan