繁体   English   中英

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

[英]Copying executable and DLLs to User specified location using CMake in windows

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

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

install()命令

如果要复制刚刚构建的可执行文件和dll,则可以使用install()命令,但该命令仅在用户运行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()命令

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

我添加了自定义命令。

add_custom_command(目标文件夹POST_BUILD命令$ {CMAKE_COMMAND} -E copy_if_different源目的地“)

并复制DLL。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM