使用Windows中的CMake将可执行文件和DLL复制到用户指定的位置

时间:2013-12-23 22:20:50

标签: visual-studio-2012 cmake

在CMake中,我想运行post build命令,它自动将可执行文件和必需的dll复制到用户指定的位置。是否可以使用CMake?

2 个答案:

答案 0 :(得分:4)

这取决于你想做什么。这是4种不同的解决方案。可能还有其他人要添加到此列表中......

install()命令

如果您要复制刚刚构建的可执行文件和DLL,可以使用install() command,但只有在用户运行make install时才能使用。

设置变量

如果要在构建时直接执行此操作,可以使用CMake变量来配置构建。这些变量在http://www.cmake.org/Wiki/CMake_Useful_Variables

中描述
EXECUTABLE_OUTPUT_PATH 
  set this variable to specify a common place where CMake should put all executable files (instead of CMAKE_CURRENT_BINARY_DIR)
  SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) 
LIBRARY_OUTPUT_PATH 
  set this variable to specify a common place where CMake should put all libraries (instead of CMAKE_CURRENT_BINARY_DIR)
  SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

自定义命令

如果你想复制你自己没有构建的其他可执行文件或DLL(二进制文件库等),一个好的解决方案是使用自定义命令。在这种情况下,使用便携式解决方案在所有操作系统上复制文件可能非常棘手。这就是为什么CMake直接从其cmake可执行文件中提供此功能(与其他人一起):

在命令行中,您可以使用:

cmake -E copy_if_different <SOURCE> <DESTINATION>

不要忘记您可以使用${CMAKE_COMMAND}变量从CMakeLists文件中调用cmake可执行文件;)

configure_file()命令

要完成,the configure_file()command允许您通过用目标文件中的值替换变量来生成另一个文件。如果源文件不包含变量,则目标文件只是源的副本。但我不知道它是否与二进制文件完美配合。你应该自己仔细测试一下。

答案 1 :(得分:1)

我添加了自定义命令。

add_custom_command(TARGET FOLDER POST_BUILD COMMAND $ {CMAKE_COMMAND} -E copy_if_different SOURCE DESTINATION“)

并复制DLL。

为了复制可执行文件,我使用了简单的INSTALL命令。

http://www.cmake.org/Wiki/CMake:Install_Commands#New_INSTALL_Command