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