CMake RUNTIME_OUTPUT_DIRECTORY sur Windows
-
23-08-2019 - |
Question
J'utilise CMake pour gérer mon multiplateforme construit, et j'ai tout a fonctionné, sauf pour ce problème. Je mis RUNTIME_OUTPUT_DIRECTORY
dans un répertoire bin/
où j'ai des fichiers de données stockés. Sous Linux, cela fonctionne très bien. Sous Windows, les exécutables se 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) cesser d'utiliser ces sous-répertoires tout à fait?
La solution
Je me sers de l'amende hack propriété prefix rapporté par Ogapo depuis des années. Il fonctionne.
Mais de la version 2.8 CMake, il y a un soutien officiel pour éviter les sous-répertoires Release / débogage sur Windows.
Utilisez soit les variables globales de CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
, ou les propriétés <ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
par cible, comme suit:
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}")
Autres conseils
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()
travaille pour moi
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 deux, mais il pourrait être la peine d'essayer.
Certaines variables cmake ont construit des versions spécifiques.
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.
Jusqu'à présent, la meilleure réponse que j'ai trouvé est d'écrire simplement CMake installer les commandes pour chacun de mes cibles et fichiers de données, et mettre en place le débogueur MSVC pour exécuter sur le répertoire d'installation. Ceci a l'avantage supplémentaire d'utiliser cpack pour créer des installateurs.
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 le définir pour chaque bibliothèque (CMake 2.8.4)
Vous devez changer l'emplacement de la construction de vos projets de studio visuels. Accédez aux propriétés du projet et dans l'onglet Compile spécifier le « Construire le chemin de sortie » pour être partout où vous le souhaitez.
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 vos paramètres du projet cela soit le dossier Debug ou Release.