CMake - 为生成的项目定义 dll 目录或文件

CMake - Define dlls directory or files for a generated project

我正在使用 CMakeVisual Studio 构建一个项目。
.exe 文件需要 2 个 dll 文件(我现在正在将其复制到 Debug forlder)。

有没有办法通过CMakeLists.txt[=61添加dlls/dlls目录 =] / FindLibrary.cmake
(与 find_library 查找 *.lib 或其他一些我忽略的方式相同) 所以我 不复制 它们 MANUALLY inside Debug 文件夹 每次我在另一个folder/pc 中生成项目(因为dll 的文件夹是已知的)?

更新:

CMakeLists.txt

..
..
set (ENVLIB $ENV{MYLIB})
FUNCTION (CONFIGURE_DEBUGGER TARGET_NAME)
  CONFIGURE_FILE(common/build/template/Main.vcxproj.user
    ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.vcxproj.user
    @ONLY
    )
ENDFUNCTION (CONFIGURE_DEBUGGER)
..
..
ADD_EXECUTABLE(Main Main.cxx)
CONFIGURE_DEBUGGER(Main)

Main.vcxproj.user

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LocalDebuggerCommandArguments>-D20</LocalDebuggerCommandArguments>
    <LocalDebuggerEnvironment>PATH=@ENVLIB@bin;$(Path)
$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>

  <!-- Additional PropertyGroups for the rest of Configuration/Platform combos -->

</Project>

生成后vcxproj.user的输出
<LocalDebuggerEnvironment>PATH=C:\Program Files\MyLib\bin;$(Path)

复制文件后,变量 ENVLIB 已更改为正确的路径,但
Visual studio 仍在请求那些 DLL。就像忽略文件 .vcxproj.user

已解决:

解决了将 属性 : <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 更改为
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

第一个选项是创建一个自定义目标,它将运行一个用于复制文件的 CMake 脚本。

第二个选项(我更喜欢)是使用 CONFIGURE_FILE 生成一个 .vcxproj.user 文件,该文件设置 LocalDebuggerEnvironment 以便将包含 DLL 的目录添加到路径。

例如,我的构建系统定义了一个函数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>

注意:在上面的示例中,我还设置了一些默认命令参数 运行 调试时使用的应用程序以及 运行s 所在的工作目录——根据您的需要进行调整需要。

注意 2:既然我正在查看它,也许我们可以更改 PropertyGroup 上的 Condition 以使其适用于每个 configuration/platform。必须调查一下。