【发布时间】:2015-06-19 18:53:35
【问题描述】:
在 CMake 中,我想运行构建后命令,它会自动将可执行文件和所需的 dll 复制到用户指定的位置。使用 CMake 是否可行?
【问题讨论】:
-
你的意思是install 吗? (:
-
是的,但是你有我可以使用的好例子吗?
在 CMake 中,我想运行构建后命令,它会自动将可执行文件和所需的 dll 复制到用户指定的位置。使用 CMake 是否可行?
【问题讨论】:
这取决于你想做什么。这里有 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 允许您通过将变量替换为目标文件中的值来生成另一个文件。如果源文件不包含变量,则目标文件只是源文件的副本。但我不知道它是否与二进制文件完美配合。你应该自己仔细测试一下。
【讨论】:
我添加了自定义命令。
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
【讨论】: