Question

J'utilise 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 pour copier l'exécutable dans le répertoire approprié, ou (encore mieux) cesser d'utiliser ces sous-répertoires tout à fait?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top