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

安装(文件“${CMAKE_CFG_INTDIR}/Abc_Win.dll”DESTINATION“Bin”),cmake,installation,Cmake,Installation,因为'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_diffe

因为'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”在我构建时放在了正确的位置

现在,我在下面的安装命令中添加了一个命令-在“Bin”目录中应为“Abc_Win.dll”-在我的EXE旁边

install(FILES "MyDllSource/${CMAKE_CFG_INTDIR}/Abc_Win.dll" DESTINATION "Bin")
当我现在构建CMakePredefinedTargets->INSTALL(无论我使用哪个MS StudioVersion)时,我在cmake生成的文件“cmake_INSTALL.cmake”中总是会得到一个构建错误:

  • 文件安装找不到
  • “MyDllSource/$(配置)/Abc_Win.dll”
我知道cmake不使用MS-VS中的构建规则,就像它在add_custom_命令中一样。另外,这个cmake文件似乎没有来自Content$(CONFIGRATION)的胶水,而Content$(CONFIGRATION)被设置为“Debug”


有人知道如何解决这个问题吗?非常感谢您的帮助。谢谢。

这里有一个未记录的变量可以使用:
CMAKE\u INSTALL\u CONFIG\u NAME

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

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

还有一个轻微的扭曲;要避免在
INSTALL
命令中扩展CMake
${CMake\u INSTALL\u CONFIG\u NAME}
(它将扩展为空字符串),需要使用
\
对其进行转义

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

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

非常感谢弗雷泽-仅仅因为我是新手,我不允许增加有用的答案。它帮助了我,你让我非常高兴;-)一句小评论:VS Studio要使用add_custom_命令查找我的lib,我仍然需要使用“MWEB_CMAKE_CFG_INTDIR”。@user3208544很高兴它有帮助:)是的,
CMAKE_INSTALL_CONFIG_NAME
将在自定义命令中为空,因为该命令是在构建时而不是在安装时执行的。