因为'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'中出现构建错误:
我知道cmake不使用来自MS-VS的构建规则 - 就像它对add_custom_command一样。它似乎也是这个cmake文件没有来自Content $(CONFIGRATION)的粘合剂,它实际设置为'Debug'。
有谁知道如何解决这个问题?非常感谢帮助。感谢。
答案 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")