1

J'essaie de construire V8 dans le cadre de ArangoDB en utilisant le build scripts officiel et suivant le Windows build instructions officiel.erreur MSB4057: La cible "v8" n'existe pas dans le projet

La compilation échoue pour toutes les cibles v8 * (v8-build.bat):

msbuild All.sln /t:v8 /p:Configuration=Release /p:Platform=x64 
msbuild All.sln /t:v8_libbase /p:Configuration=Release /p:Platform=x64 
msbuild All.sln /t:v8_libplatform /p:Configuration=Release /p:Platform=x64 

erreur MSB4057: La cible "v8" n'existe pas dans le projet.

Si j'ouvre le fichier de solution dans Visual Studio, il ressemble à ceci:

All.sln

Je peux construire v8, v8_libbase et v8_libplatform très bien VS.

  • Windows 7 64bit
  • Visual Studio 2013 Édition Intégrale
  • Cygwin 2.2.0
  • CMake 3.3.1

Répondre

3

La bonne façon de spécifier une cible/projet si elle est dans une solution le dossier est:

msbuild all.sln /t:PATH\TO\PROJECT 

Mais dans le cas de (tools) et (gyp) ce n'est simplement pas possible, car msbuild ne peut pas gérer les parenthèses dans le paramètre cible /t.

Donc soit supprimer () et spécifier le chemin comme tools\gyp\v8, ou se débarrasser des dossiers de solution entièrement. Si la solution est plate, /t:v8 fonctionnera.

Malheureusement, l'enrobage des noms de dossier avec des parenthèses ainsi que la génération de .sln non-plat sont codés en dur dans gyp, ce qui a généré mon all.sln. Il n'y a pas de commutateur pour contrôler si les dossiers de solution sont créés ou non. Il les créera si la version cible de Visual Studio est connue pour supporter ce type d'imbrication.

Solution: Forcer génération de solution plate à Gyp, voir
https://github.com/arangodb/arangodb/commit/796d2d263db6271142d954c8c99b9dec0fbe75e9

erreurs signalées à Microsoft/msbuild et Google/gyp:

@ dothebart et this post m'a aidé beaucoup à comprendre, merci!

1

Dans VS2013 utiliser

msbuild All.sln /p:Project=v8;Configuration=Release;Platform=x64 
+0

s'il vous plaît expliquer votre code – aschipfl

+0

Je me suis précipité - il reconstruit toute la solution. – UnicornumVerum

+0

Je ne suis pas sûr si c'est une option. – CoDEmanX

8

Vous pouvez exécuter

set MSBuildEmitSolution=1 
msbuild All.sln /t:v8 

Puis chercher dans le fichier généré All.sln.metaproj les noms cibles exactes (<Target Name="">) de tous les projets que vous voulez construire. v8 peut avoir un nom comme _tools_\_gyp_\v8. Après que vous pouvez construire des projets

msbuild All.sln /t:"_tools_\_gyp_\v8" /p:Configuration=Release /p:Platform=x64 
+0

Merci cela a aidé parfaitement. Mon problème pour les autres à savoir est que si votre projet s'appelle "hello.world" La cible msbuild est en fait "hello_world" – greektreat