J'ai déjà fouillé ce numéro sur d'autres messages, mais rien jusqu'à présent. Alors je suis ici.
J'aimerais créer un paquet portable. Portable comme dans "Je peux l'exécuter sur n'importe quelle machine OS X, même si mes libs requis (qt) ne sont pas installés". Malheureusement, je ne peux pas comprendre comment utiliser Fixup_Bundle () (qui semble être le bon outil pour cela) pour atteindre cet objectif. P>
Voici mon projet de cmake minimal généré C ++ Projet: P>
Main.CPP P>
vincent@hpcd0016-lion:test.app/Contents/ (0) > otool -L test.app/Contents/MacOS/test test.app/Contents/MacOS/test: path_to_qt/Qt-4.8.1/osx/lib//QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.1) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) vincent@hpcd0016-lion:tmp/test_bundle/ (0) > otool -L test.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore test.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore: path_to_qt/Qt-4.8.1/osx/lib//QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.1) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 41.0.0) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 635.15.0) /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55010.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1094.0.0) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 53.0.0)
3 Réponses :
J'ai ajouté cette ligne en haut de mes cmakelists.txt et c'était-ce. p> Par défaut, apparemment, CUKE_INSTALL_PREFIX est défini sur / USR / Local sur ma machine. Si vous modifiez-le sur mon répertoire de travail actuel résolu le problème, cela signifie que CMAKE essayait d'effectuer certaines opérations sur / usr / local (qu'il n'est pas autorisé à faire). Alors, pourquoi le message d'erreur ne mentionne pas une telle erreur d'accès à droite? P> Je ne sais pas si je n'ai pas lu assez de documentation ou si la documentation nécessite des précisions ... P> < / p>
La documentation nécessite des précisions ... Je me suis battu exactement le même problème récemment. M'a fait perdre quelques heures.
J'ai le même problème, et définir l'installation de préfixe sur un Dir de bureau écrit ne semble malheureusement pas suffisant.
En outre, je devais effectivement être encore plus explicite sur le chemin d'installation (c'est-à-dire dans le fichier .app).
comme ceci: p> (NB no Script séparé mais code plutôt embarqué - ne devrait pas faire une différence). p> p>
Comment avez-vous résolu le problème que le plugin de plate-forme QT (libqcocoa.dylib) n'est pas fourni avec le reste?
Répondre à la réponse de Timlukins, si vous allez appeler des variables de cmake dans le code installer em>, vous devez faire très attention à leur échapper contre une évaluation précoce. Le code Vous avez posté la résolution (ou quel que soit le chemin que vous avez eu Vous devez protéger le CUKE_INSTALL_PREFIX code> immédiatement, avant d'intégrer votre code dans le script d'installation. Ce qui signifie que le fichier
cmake_install.cmake code> contiendra: p>
CUKE_INSTALL_PREFIX code> défini sur lors de la génération L'arbre de construction.) Ce n'est pas ce que vous voulez, puisqu'il rend votre consolidation sans appariement, même
CUKE_INSTALL_PREFIX code> Invocation Donc, il en fait dans le script d'installation intact et utilisera la valeur de l'installation. Il y a deux façons que vous pouvez faire cela. P>
install(CODE [[
include(BundleUtilities)
# You could also do this part before the CODE using
# install(TARGETS MyApp BUNDLE DESTINATION foo)
#
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/foo"
TYPE DIRECTORY FILES "$<TARGET_BUNDLE_DIR:MyApp>")
# This string is crazy-long enough that it's worth folding into a var...
set (_plugin_file "$<TARGET_FILE_NAME:Qt5::QCocoaIntegrationPlugin>")
# Ditto the output paths for our installation
set (_appdir "${CMAKE_INSTALL_PREFIX}/foo/MyApp.app")
set (_outdir "${_appdir}/Contents/plugins/platforms")
file(INSTALL DESTINATION "${_outdir}"
TYPE FILE FILES "$<TARGET_FILE:Qt5::QCocoaIntegrationPlugin>")
fixup_bundle("${_appdir}" "${_outdir}/${_plugin_file}" "")
]] COMPONENT Runtime)
install(CODE [[
include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/MyApp.app" "" "")
]] COMPONENT Runtime)