Qt应用程序在运行时依赖于动态链接库以及资源文件,在调试和生成Qt安装包时都需要进行处理,否则经常出现本地运行可以,而在客户电脑上不行的场景.
这时,保持开发者本地环境和真实运行环境一致是比较好的实践.即:
开发者环境不配置Qt相关环境变量;
不使用专门的IDE及插件(例如QtVisualStudioTools).
这种情况下CMake是比较好的选择,这时就需要解决调试时部署Qt运行时的问题:
依赖的Qt动态链接库依赖的Qt插件Qt翻译文件Qml等资源好在Qt在Windows上提供了windeployqt来帮助开发者.那么如何整合到CMakeLists中呢?
工程构建结果的部署工程构建结果包含构造出来的exe、dll、qm以及其它资源文件.CMake默认会配置exe、dll等内容的输出目录,而资源文件是需要开发者自行处理的.这里也分两种场景来处理:
调整运行时输出位置在CMake中exe、dll等被成为运行时(runtime),通过指定CMAKE_RUNTIME_OUTPUT_DIRECTORY可以调整其输出位置,假设要根据不同的配置(Debug、Release等)输出到构建目录,则在工程的主CMakeLists.txt中通过这种方式定义:
if(NOTDEFINEDCMAKE_RUNTIME_OUTPUT_DIRECTORY)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY"${CMAKE_BINARY_DIR}/$CONFIG")endif()拷贝资源到输出位置
要执行这一操作,首先要获取输出位置,假设你为库或者应用程序定义的target名称为TARGET_NAME,通过如下指令可以获取输出位置:
$TARGET_FILE_DIR:TARGET_NAME
qm文件的路径存储在TARGET_NAME_QM_FILE变量中,那么可以以如下命令完成目录创建、翻译文件拷贝动作:
##复制资源文件add_custom_