web-dev-qa-db-fra.com

CMake propose-t-il une méthode pour définir le répertoire de travail d'un système de build donné à utiliser lors de l'exécution / du débogage du projet?

J'ai un projet avec la structure suivante:

project_name/CMakeLists.txt
project_name/src
project_name/resources
...
project_name-build/configuration_name/project_name.exe

Je veux que mon application soit exécutée dans le répertoire racine du projet project_name pour pouvoir accéder directement à resources.

CMake fournit-il une méthode pour spécifier cette propriété, ou vais-je devoir la définir manuellement dans chaque environnement de build que j'utilise?

J'ai regardé autour de moi dans la documentation et je n'ai rien trouvé d'autre que la possibilité de mettre en place un événement post-build pour exécuter mon projet à partir du répertoire souhaité ce qui est moins que souhaitable. J'ai également constaté que le paramètre de répertoire de travail pour Visual Studio est enregistré dans un fichier par utilisateur (.vcxproj.user) que je ne crois pas que CMake génère (ce qui indique que la réponse est probablement non) .

26
Peter Clark

Depuis CMake 3.8, il y a VS_DEBUGGER_WORKING_DIRECTORY propriété cible, qui vous permet de définir le répertoire de travail du débogueur pour une cible dans Visual Studio.

Exemple d'utilisation:

set_property(TARGET MyTarget PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
34
tambre

Comme l'a souligné drescherjm (dans son commentaire sur la question) CMake ne fournit pas de méthode pour définir directement un répertoire de travail. Cependant, CMake fournit des méthodes indirectes pour ce faire.

Je pense que le chemin que je vais prendre est de tilisez la commande configure_file pour remplir un fichier .user de modèle .

6
Peter Clark

Voici une solution plus simple. Collez ceci à la fin de votre cmake:

file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.vcxproj.user" 
    "<?xml version=\"1.0\" encoding=\"utf-8\"?>     \
    <Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.Microsoft.com/developer/msbuild/2003\">
    <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">
        <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
        <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
    </PropertyGroup>
    <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">
        <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
        <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
    </PropertyGroup>
    </Project>")

Il écrase le fichier vcxproj.user par défaut pour le projet en cours et spécifie $ (OutDir) pour le répertoire de travail comme souhaité pour le débogage. Assurez-vous que $ PROJECT_NAME est le nom de votre projet.

5
lithozine