这是 .pro 文件的一部分,其中列出了要安装的文件。
install_it.path = $$OUT_PWD/../Deploy
install_it.files = sgip/sgip.json sgip/psi.tpl sgip/sgip_template.json \
sgip_sokol_dll/usb_sgip_dll/release/usb_sgip_dll.dll \
sgip/release/sgip.exe \
$$PWD/sgip/3rdparty/postgres/bin/*
#
install_qtbin.path = $$OUT_PWD/../Deploy
install_qtbin.files = $$[QT_INSTALL_BINS]/icu* \
$$[QT_INSTALL_BINS]/libgcc_s_dw2-1.dll \
$$[QT_INSTALL_BINS]/libstdc++-6.dll \
$$[QT_INSTALL_BINS]/libwinpthread-1.dll \
$$[QT_INSTALL_BINS]/Qt5Concurrent.dll \
$$[QT_INSTALL_BINS]/Qt5Core.dll \
$$[QT_INSTALL_BINS]/Qt5Gui.dll \
$$[QT_INSTALL_BINS]/Qt5PrintSupport.dll \
$$[QT_INSTALL_BINS]/Qt5Widgets.dll \
$$[QT_INSTALL_BINS]/Qt5Sql.dll
install_img.path = $$OUT_PWD/../Deploy/img
install_img.files = ../img/*
#
install_sqldrivers.path = $$OUT_PWD/../Deploy/sqldrivers
install_sqldrivers.files = $$[QT_INSTALL_PLUGINS]/sqldrivers/qsqlpsql.dll
INSTALLS += \
install_it \
install_img \
install_qtbin \
install_sqldrivers
有两个问题。首先,没有复制 libstdc++-6.dll 文件。文件存在但无法复制:复制实用程序返回“找不到文件”错误。如果我在命令行上运行相同的命令,我会得到同样的错误。如果您在命令行的文件名中指定 libstdc*,则文件会正常复制,但此技巧在 .pro 文件中不起作用,因为完整的文件名最终会出现在 Makefile 中。这怎么能解决?
第二。如果在 qmake 执行时某个文件不存在,那么这个文件将不会进入 Makefile。但是有些文件,例如sgip.exe 或usb_sgip_dll.dll,是在make 期间创建的,因此在运行qmake 时它们是否存在并不重要。无论如何,我如何让 qmake 将这些文件放入 makefile 中?
更新程序
发现 xcopy 实用程序正确地复制了这个文件。手动替换Makefile中的COPY、INSTALL_FILE等参数后,项目安装无误。但我希望 qmake 本身能够替代 Makefile 中的 xcopy 实用程序。
找到了解决其中一个问题的方法。qmake中有未记录的变量,正好可以代替文件复制命令。通过将以下行添加到 .pro 文件,我得到了所需的行为。
强制将文件添加到安装规则的问题仍然悬而未决。