运行 Qt 项目时,Qt Creator 首先通过 ssh 将项目部署到远程嵌入式 Linux 设备上,然后在远程设备上运行可执行文件。这个特性几乎可以即时反馈 Qt 应用程序如何在嵌入式设备上工作。
部署工作可以很好地使用 qmake 的 INSTALLS 变量 来实现。不过 CMake 不具备类似 qmake 的 INSTALLS 变量的功能。幸运的是,Qt 提供了一个解决方案。下面将通过一个示例 CMakeLists.txt 文件来演示这个解决方案。
我们希望在嵌入式设备的 /opt/mycompany/bin 中安装 Qt 项目的可执行文件,在 /opt/mycompany/lib 中存放需要的三方库,而 /opt/mycompany/cad 是包含 3D CAD 文件的目录。CMakeLists.txt 的安装部分(位于 ${CMAKE_SOURCE_DIR}/src 中)与此类似。
set(CMAKE_INSTALL_PREFIX "/opt/mycompany")
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
)
install(FILES ./lib/other/libMagic.so
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
)
install(DIRECTORY ./cad/
DESTINATION ${CMAKE_INSTALL_PREFIX}/cad
)
上述设置本地部署到 Linux PC 与 make install 都工作良好。但是,嵌入式 Linux 设备的远程部署不能正常工作。
Qt Creator 在 项目>运行设置>部署>Files to deploy 设置中显示了从本地文件路径到远程文件路径的映射。对于上面的安装功能,Qt Creator 将只显示一个条目。可执行应用程序从其构建位置 ${CMAKE_BINARY_DIR}/src/app 映射到 src。这显然是不对的。
解决这个问题的思想 是让 CMake 将从本地文件路径到远程文件路径的映射写入一个被命名为 QtCreatorDeployment.txt 的文件中。正确定义的 QtCreatorDeployment.txt 将包含以下映射。
/opt/mycompany
src/../../build-app-Remote_Qt_5_12_1-Release/src/app:bin
src/lib/other/libMagic.so:lib
src/ca