Предлагает ли 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 генерирует (что указывает к ответу, вероятно, нет).
Ответы
Ответ 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.