14 votes

Forcer msbuild à construire un projet qui n'est pas sélectionné dans la configuration de la solution

J'utilise msbuild en ligne de commande pour construire un fichier de solution généré :

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

Le problème est que la solution générée par cmake a un projet INSTALL qui n'est pas construit par défaut.

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)

Comment puis-je forcer l'INSTALL cible à être construite sans ouvrir manuellement la solution et cocher la case de la configuration ?

Une solution consiste à appeler directement le fichier vcproj (comme je l'ai fait ici)

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

mais l'avertissement suivant s'affiche

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.

Comme vous pouvez le constater, la construction a réussi. Je suis capable d'assurer une compilation correcte en appelant d'abord la solution, mais je veux forcer la solution pour construire le projet INSTALL.

Des idées ?

12voto

stijn Points 13405

À ma connaissance, ce n'est pas possible. En regardant les options de la ligne de commande de msbuild et dans le fichier de la solution, il n'y a rien qui le permette. Mais puisque vous utilisez cmake, vous pouvez l'utiliser pour tout construire pour vous sans avoir à le faire manuellement. J'ai trouvé ce fil qui pose essentiellement la même question que vous, et qui a la syntaxe correcte en utilisant l'idée que j'ai déjà mise dans le commentaire :

cmake --build . --target install

En regardant un peu plus loin, de la devenv cmmand line options, il semble qu'il ait la fonctionnalité que vous recherchez. Cela force la construction du projet donné même s'il n'est pas activé dans le gestionnaire de configuration :

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

5voto

Andre Points 5805

Réponse de stijn est la manière "idiomatique" de construire des cibles avec cmake.

Notez cependant que MSbuild peut construire les deux fichiers de solution et les dossiers de projets. Au lieu d'appeler msbuild zlib.sln vous pouvez également appeler msbuild ALL_BUILD.vcxproj .

De même, vous pouvez appeler msbuild INSTALL.vcxproj .

3voto

GeorgesZ Points 91

En utilisant la solution générée par CMake version 3.2.2, il n'est en effet pas possible de construire la cible INSTALL à partir de msbuild via la solution. La cause principale est que pour la cible INSTALL, la solution ne contient que des entrées comme celles de la section GlobalSection(ProjectConfigurationPlatforms) :

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

Si vous ajoutez des entrées comme celles-ci :

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

Il devient alors possible de construire la cible INSTALL à l'aide d'une commande comme celle-ci :

    msbuild <pathToProject>.sln /target:INSTALL

0voto

levicki Points 1

Le plus simple est de construire le projet directement, mais n'oubliez pas de spécifier la configuration et la plate-forme.

msbuild /p:Configuration=Release /p:Platform=Win32 INSTALL.vcxproj

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X