安装(FILES“$ {CMAKE_CFG_INTDIR} /Abc_Win.dll”DESTINATION“Bin”)

时间:2014-01-17 23:43:40

标签: cmake install

因为'Abc_Win.dll'是共享的('dll')并且需要复制到target-EXE我添加了一个自定义目标 - 就像这样。我正在使用MS-VisualStudio 2005-2011并使用cmake 2.8.8。

add_custom_target( "Abc_Win.dll" )
add_custom_command( TARGET "Abc_Win.dll" POST_BUILD
                    COMMAND ${CMAKE_COMMAND} -E copy_if_different
                    "MyDllSource/${CMAKE_CFG_INTDIR}/Abc_Win.dll"
                    "MyExeDest/${MWEB_CMAKE_CFG_INTDIR}/Abc_Win.dll" )
set_property(Abc_Win.dll" PROPERTY FOLDER ${MWEB_FOLDER_ADDON}/${MWEB_FOLDER_RTE})

以上所有工作都像我期望的那样,当我构建时,'Abc_Win.dll'就在正确的位置。

现在我添加一个以下安装命令 - 在我的EXE旁边的“Bin”目录中期待'Abc_Win.dll'。

install(FILES "MyDllSource/${CMAKE_CFG_INTDIR}/Abc_Win.dll" DESTINATION "Bin")

当我现在构建CMakePredefinedTargets-> INSTALL(无论我使用哪个MS-StudioVersion)时,我总是在cmake生成的文件'cmake_install.cmake'中出现构建错误:

  • 文件INSTALL找不到
  • “MyDllSource / $(配置) /Abc_Win.dll”

我知道cmake不使用来自MS-VS的构建规则 - 就像它对add_custom_command一样。它似乎也是这个cmake文件没有来自Content $(CONFIGRATION)的粘合剂,它实际设置为'Debug'。

有谁知道如何解决这个问题?非常感谢帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用未记录的变量:CMAKE_INSTALL_CONFIG_NAME

除非你碰巧在你的CMakeLists.txt中自己定义了这个,否则当CMake运行时它将是未定义的。

但是,当您在CMakeLists.txt中使用install命令时,CMake会在构建树的根目录中生成一个名为“cmake_install.cmake”的文件(与CMakeCache.txt相同)。这是在安装时执行的,它将CMAKE_INSTALL_CONFIG_NAME设置为Visual Studio中的当前配置。

还有一点点扭曲;为了避免CMake在${CMAKE_INSTALL_CONFIG_NAME}命令中扩展install(它会扩展为空字符串),您需要使用\转义它。

因此,您只需将install命令更改为:

install(FILES "MyDllSource/\${CMAKE_INSTALL_CONFIG_NAME}/Abc_Win.dll"
        DESTINATION "Bin")