【问题标题】:install(FILES "${CMAKE_CFG_INTDIR}/Abc_Win.dll" DESTINATION "Bin")install(FILES "${CMAKE_CFG_INTDIR}/Abc_Win.dll" DESTINATION "Bin")
【发布时间】:2014-01-17 23:43:39
【问题描述】:

因为“Abc_Win.dll”是共享的(“dll”)并且需要复制到目标 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/$(Configuration)/Abc_Win.dll”

我知道 cmake 不使用 MS-VS 的构建规则 - 就像它为 add_custom_command 所做的那样。似乎这个 cmake 文件也没有来自 Content $(CONFIGRATION) 的胶水,它被设置为“Debug”。

有人知道如何解决这个问题吗?帮助将不胜感激。谢谢。

【问题讨论】:

    标签: cmake installation


    【解决方案1】:

    您可以在这里使用一个未记录的变量:CMAKE_INSTALL_CONFIG_NAME

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

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

    还有一个轻微的转折;为避免 CMake 在 install 命令中扩展 ${CMAKE_INSTALL_CONFIG_NAME}(它会扩展为空字符串),您需要使用 \ 对其进行转义。

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

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

    【讨论】:

    • 非常感谢弗雷泽 - 只是因为我是新手,所以我不允许增加有用的答案。它有帮助,你让我很高兴 ;-) 一个小评论:为了让 VS-Studio 使用 add_custom_command 找到我的库,我仍然需要使用 'MWEB_CMAKE_CFG_INTDIR'。
    • @user3208544 很高兴它有帮助:) 是的,CMAKE_INSTALL_CONFIG_NAME 在自定义命令中将为空,因为该命令是在构建时而不是安装时执行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多