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

时间:2019-01-04 13:06:03

标签: c++ visual-studio-2015 cmake

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

是否可以通过 CMakeLists.txt / FindLibrary.cmake添加 dlls / dlls目录
(使用find_library来找到*.lib的方式或我忽略的其他方式),以便我不要复制它们每次我在另一个文件夹/个人电脑中生成项目时,手动 内部 调试 文件夹(因为知道dll的文件夹)?

UPDATE:

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已更改为正确的PATH,但
Visual Studio仍在请求这些DLL。就像忽略了文件.vcxproj.user

已解决:

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

1 个答案:

答案 0 :(得分:1)

第一个选择是创建一个自定义目标,该目标将运行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使其适用于所有配置/平台。要调查一下。