Первый вариант - создать пользовательскую цель, которая будет запускать сценарий CMake для копирования файлов.
Второй вариант (который я предпочитаю) заключается в использовании CONFIGURE_FILE
для создания файла .vcxproj.user
, который устанавливает LocalDebuggerEnvironment
так, чтобы каталог с DLL добавлялся в PATH.
Например, моя система сборки определяет функцию CONFIGURE_DEBUGGER
:
FUNCTION(CONFIGURE_DEBUGGER TARGET_NAME)
CONFIGURE_FILE(${ROOT}/common/build/template/executable_vs14.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.vcxproj.user
@ONLY
)
ENDFUNCTION(CONFIGURE_DEBUGGER)
Я вызываю эту функцию сразу после определения исполняемой цели, например,
ADD_EXECUTABLE(example
${EXAMPLE__SRC}
${EXAMPLE__HDR}
)
CONFIGURE_DEBUGGER(example)
Шаблон executable_vs14.vcxproj.user
выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerCommandArguments>-D20</LocalDebuggerCommandArguments>
<LocalDebuggerWorkingDirectory>$(TargetDir)\..\..\common\</LocalDebuggerWorkingDirectory>
<LocalDebuggerEnvironment>PATH=$(SolutionDir)..\deps\bin;$(Path)
$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<!-- Additional PropertyGroups for the rest of Configuration/Platform combos -->
</Project>
Примечание. В приведенном выше примере я также установил некоторые аргументы команды по умолчанию, с которыми приложение запускается при отладке, а также рабочий каталог, в котором оно запускается.
Примечание 2: Теперь, когда я смотрю на это, возможно, мы можем изменить Condition
на PropertyGroup
, чтобы он применялся к каждой конфигурации / платформе. Надо разобраться в этом.