Подтвердить что ты не робот

Предлагает ли CMake метод установки рабочего каталога для данной системы сборки, которая будет использоваться при запуске/отладке проекта?

У меня есть проект со следующей структурой:

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

Я хочу, чтобы мое приложение запускалось в корневом каталоге проекта project_name, чтобы он мог напрямую обращаться к resources.

Предоставляет ли CMake метод для указания этого свойства, или мне придется вручную установить его в каждой среде сборки, которую я использую?

Я просмотрел документацию и не нашел ничего, кроме возможности создания события после сборки для запуска моего проекта из нужного каталога, что менее желательно. Я также обнаружил, что параметр рабочего каталога для Visual Studio сохраняется в файле для каждого пользователя (.vcxproj.user), который я не считаю, что CMake генерирует (что указывает к ответу, вероятно, нет).

4b9b3361

Ответ 1

Начиная с CMake 3.8, существует целевое свойство VS_DEBUGGER_WORKING_DIRECTORY, которое позволяет вам установить рабочий каталог отладчика для цели в Visual Studio.

Пример использования:

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

Ответ 2

Как отметил дрешерджм (в своем комментарии к вопросу), CMake не предоставляет метод прямого задания рабочего каталога. Однако CMake предоставляет косвенные методы для этого.

Путь, который, я думаю, я возьму, это использовать команду configure_file для заполнения файла шаблона .user.

Ответ 3

Вот более простое решение. Вставьте это в конец вашего 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>")

Он перезаписывает файл vcxproj.user по умолчанию для текущего проекта и задает $(OutDir) для рабочего каталога, как требуется для отладки. Убедитесь, что имя_проекта $PROJECT_NAME.