J'utilise cmake pour gérer mes versions multiplateformes, et j'ai tout mis au point à l'exception de ce problème. J'ai mis RUNTIME_OUTPUT_DIRECTORY
dans un répertoire bin/
où j'ai des fichiers de données stockés. Sous Linux, cela fonctionne bien. Sous Windows, les exécutables sont placés dans le sous-répertoire Debug
/Release
en fonction du type de construction. Est-il possible d'obtenir cmake pour copier l'exécutable dans le répertoire approprié, ou (encore mieux) arrêter complètement d'utiliser ces sous-répertoires?cmake RUNTIME_OUTPUT_DIRECTORY sur Windows
Répondre
J'ai utilisé le hack de propriété de préfixe fin signalé par Ogapo depuis des années. Ça marche. Mais à partir de la version 2.8 de CMake, il existe un support officiel pour éviter les sous-répertoires Release/Debug sous Windows.
Utilisez la CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
globales variables, ou les propriétés par cible <ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
, comme ceci:
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
Je n'ai pas cherché de solution. Et est tombé sur cette réponse et en même temps j'ai trouvé ce lien: https://cmake.org/Bug/view.php?id=9163. Cette réponse utilise exactement la même technique. Je pense que cette réponse est la meilleure solution jusqu'à présent. Fonctionne plutôt bien pour moi. Merci. –
J'ai trouvé quelques bonnes discussions sur ce sujet:
http://www.cmake.org/pipermail/cmake/2008-April/021355.html
http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=8366
Serait-il possible d'utiliser le dépréciée EXECUTABLE_OUTPUT_PATH au lieu de RUNTIME_OUTPUT_DIRECTORY? Je ne suis pas sûr de ce que la fonctionnalité a changé entre les 2, mais cela pourrait valoir la peine d'essayer.
Vous devez modifier l'emplacement de construction de vos projets de studio visuel. Allez dans Propriétés du projet et dans l'onglet Compiler, spécifiez le 'Chemin de sortie de génération' où vous voulez.
Remarque
Je ne sais pas comment cela est pertinent car je ne sais pas CMake.
Vous pouvez utiliser le jeton suivant dans Visual Studio construire des événements:
$(TargetPath)
Ce sera le chemin de l'emplacement que votre projet est construit pour si en fonction de paramètres de votre projet ce sera soit la Déboguer ou relâcher le dossier.
Certaines variables cmake ont des versions spécifiques à la construction.
CMAKE_C_FLAGS
the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS().
CMAKE_C_FLAGS_DEBUG
compiler flags for compiling a debug build from C sources.
CMAKE_C_FLAGS_RELEASE
compiler flags for compiling a release build from C sources.
CMAKE_C_FLAGS_RELWITHDEBINFO
compiler flags for compiling a release build with debug flags from C sources.
Je n'ai pas vérifié ces vars existent, mais peut-être mise en RUNTIME_OUTPUT_DIRECTORY_DEBUG
& & RUNTIME_OUTPUT_DIRECTORY_RELEASE
à la même chose pourrait fonctionner.
Je ne sais pas si ces répertoires sont intentionnels ou un bug, mais au risque d'incompatibilité avant vous pouvez ajouter:
if (MSVC_IDE)
# hack to get around the "Debug" and "Release" directories cmake tries to add on Windows
set_target_properties (${NAME} PROPERTIES PREFIX "../")
endif()
cela a travaillé pour moi
Cela fonctionne bien pour moi aussi. Pour les fichiers .lib, utilisez SET_TARGET_PROPERTIES ($ {PROJECT_NAME} PROPRIETES IMPORT_PREFIX "../") – Torleif
Jusqu'à présent, le meilleur La réponse que j'ai trouvée est d'écrire simplement CMake install commands pour chacune de mes cibles et fichiers de données, et de configurer le débogueur MSVC pour qu'il sorte du répertoire d'installation. Cela a l'avantage supplémentaire d'utiliser CPack pour créer des programmes d'installation.
Pour moi une approche globale:
set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")
fait le travail, donc je n'ai pas de définir pour chaque bibliothèque (CMake 2.8.4)
- 1. paramètres cmake sur la neige léopard
- 2. Makefile équivalent dans CMake
- 3. erreur de compilation CMake .. (Commande inconnue CMake "QT4_WRAP_UI")
- 4. Bibliothèques tierces dans CMake
- 5. Désactiver le test dans cmake
- 6. En quoi la commande CMake configure_file sous Windows est-elle différente?
- 7. CMake Visual Studio liant l'exécutable avec la bibliothèque statique
- 8. Prévenir présentation de la variable dans l'interface graphique de CMake
- 9. Comment réparer une build CMake apparemment corrompue?
- 10. Inclure des problèmes lors de l'utilisation de CMake avec Gnu sur le projet Qt
- 11. Génération de liaisons SWIG avec CMake
- 12. Puis-je et dois-je utiliser CMake pour ma configuration
- 13. Comment compiler un fichier binaire 32 bits sur une machine Linux 64 bits avec gcc/cmake
- 14. Installer le service Windows sur Windows Vista
- 15. Windows Activation Service sur Windows 2003
- 16. De toute façon dans CMake pour exiger GCC version 4+?
- 17. Comment configurer CMake pour créer une application pour l'iPhone
- 18. pecl memcached sur windows
- 19. MSDataShape sur Windows Vista
- 20. CouchDB sur Windows?
- 21. rbuic sur windows
- 22. svn checkout sur windows
- 23. Natif GTK # sur Windows?
- 24. Passager sur Windows
- 25. cronJob sur Windows
- 26. Miktex sur Windows Vista
- 27. Cron sur XAMPP (windows)
- 28. fcntl substitut sur Windows
- 29. Webkit sur Windows Mobile
- 30. MySQL/Ruby sur Windows
Je suppose que vous utilisez cmake pour générer une solution Visual Studio/fichiers de projet, est-ce pas? Quelle version de Visual Studio est utilisée? Quelle version de cmake? –
Oui, j'utilise CMake pour générer les fichiers de solution (cmake 2.6, VS 2005) – thekidder