前言
qt开发程序时,有时候需要我们自动复制一些文件到别的目录,最常见的的当我们发布自己的lib库时,别人需要我们提供的一般包括头文件和lib文件(mingw编译的为*.a文件)以及dll,如果没有写好自动拷贝的代码,每次发布时需要我们手动到程序目录下拷贝以上文件整理然后发布,这是比较麻烦的,以下列举了两种实现自动拷贝这些文件的方式供大家参考,喜欢的可以收藏下哈。
方法一 install方式拷贝
这种方式实现拷贝比较常见,这里使用qtcreator创建一个例程生成lib为例子。

选择Library ->C++ library,然后起好名字一直下一步,这里取MyLib,完成后生成示例工程如下:
直接编译则在编译目录下会生成动态库和.a文件。
添加install代码如下:
win32 {
target.path = $$PWD/libPath
header.path = $$PWD/libPath/include
header.files =$$PWD/*.h
}
!isEmpty(target.path): INSTALLS += target header
其中target.path指定了我们拷贝的路径$$PWD/libPath,target为源码目录下的libPath,拷贝规则是没有文件夹会自动创建,所以当拷贝完后源码目录下会看到新建的文件夹libPath,没有指定files则默认拷贝动态库和lib文件,同时因为我们还需要拷贝头文件,于是指定了头文件header的path和files,其中files我们可以使用正则表达式筛选出我们需要的头文件。
最后一句不要忘了使用INSTALLS += 添加我们创建的target和header。
做完以上步骤后点击qtcreater的项目,展开build步骤下"make"详情,添加install参数,如下:

然后编译,成功后即可以在源码目录下看到我们新建的libPath文件夹,里面已经拷贝了发布所需的所有东西。
这种拷贝的方式操作比较简单,方法灵活,我们可以添加多种拷贝策略,如再添加拷贝图片文件我们只需要定义一个图片的路径和使用正则表达式过滤图片添加INSTALL即可,缺点是需要修改参数。
方法二 QMAKE_POST_LINK方法
该方法也可以实现拷贝,原理是调用系统的copy或者xcopy方法实现拷贝,所以使用这种方式需要我们懂得一些基本的批处理命令使用,经过研究如果使用copy或者xcopy脚本不太容易实现上述功能,copy不会新建文件夹,xcopy复制文件夹比较好用,所以如果需要达到复制动态库头文件和lib库建议使用方法1,或者读者有更好的脚本语言编程能力也可以实现,本人一般使用QMAKE_POST_LINK拷贝文件夹下比较杂乱的文件
copy_lib.depends = $${DESTDIR}
copy_lib.depends = $$replace(copy_lib.depends, /, \\)
copy_lib.target = $$[QT_INSTALL_QML]/$$TARGET/
copy_lib.target = $$replace(copy_lib.target, /, \\)
copy_lib.commands = xcopy $$copy_lib.depends $$copy_lib.target /E/Y
QMAKE_POST_LINK+= $$copy_lib.commands
上述代码拷贝了DESTDIR下的目标文件夹所有内容到 QT_INSTALL_QML目录下,一般在生成QML库后自动拷贝动态库和qmltype等多种类型文件到安装目录下。
该方法的有点就是每次编译变更后会在编译完成后自动执行cmd命令,无需添加INSTALL参数,并且由于其调用cmd命令便大大扩展了其应用范围,即不仅仅可以完成简单的拷贝工作,还可以编译完成后通过CMD调用其他软件进行处理工作。缺点是需要使用者掌握dos命令。
顺便说一下在windows下目录结构需要使用反斜杠 “”,可以看到上述代码中多次使用replace方法替换斜杠为反斜杠,所以写起来还是比较繁琐的。
总结
如果拷贝目标用来发布自己的库那么建议使用方法1,简单灵活适合发布。如果目标是拷贝文件夹或者需要调用别的软件来处理推荐方法2。
本文介绍了在QT开发中如何自动复制文件到指定目录的两种方法:1. 使用install方式拷贝,适用于发布库时拷贝头文件和库文件;2. 利用QMAKE_POST_LINK方法,通过调用系统命令拷贝,适用于复杂拷贝需求或配合其他软件处理。两种方法各有优缺点,根据实际需求选择合适的方法。
3855

被折叠的 条评论
为什么被折叠?



