一、认识QMake工程文件基本元素
(1)变量可以用于存储临时的列表值,覆写存在的列表值或是扩展新的值
第一种赋值方法只包括同一行指定的值,下列代码显示了如何赋值列表值给变量:
HEADERS = mainwindow.h paintwidget.h
第二种赋值方法会使用“\”字符分隔列表值的项
变量的列表值可以使用如下方式扩展:
SOURCES = main.cpp mainwindow.cpp \
paintwidget.cpp
(2)qmake会识别下列变量的值,并描述变量的内容
CONFIG:通用工程配置选项,是一个qmake生成MakeFile文件时的特殊变量。
DESTDIR:可执行文件或库文件的输出目录
FORMS:由uic处理的UI文件列表
HEADERS:构建工程使用的头文件列表
QT:Qt相关配置选项
RESOURCES:包含到最终工程的资源文件列表
SOURCES:用于构建工程的源文件列表
TEMPLATE:构建工程的模板,决定构建过程输出一个应用,一个库或是一个插件
变量的内容可以通过在变量名称前加“$$”符号来访问,用于将一个变量的内容赋值给另一个变量。TEMP_SOURCES = $$SOURCES
$$操作符可以被扩展用于操作字符串和值列表的内置函数中。
通常,变量用于包含空格分隔符的值列表,但有时需要指定包含空格的值,必须使用双引号包含。DEST = "Program Files"
引号内的文本在值列表内作为单个值对待。类似的方法可以用于处理包含空格的路径,尤其是在Windows平台定义INCLUDEPATH和LIBS变量。
win32:INCLUDEPATH += "C:/mylibs/extra headers"
unix:INCLUDEPATH += "/home/user/extra headers"
二、项目相关 - 编译后使用 qmake $$replace函数拷贝文件
pro文件包含pri文件,在pri文件中进行拷贝,如下图所示
//< 图中部分 WindowsTool.pri 代码
WindowsBuild {
CONFIG += WindowsToolEnabled
DEFINES += WindowsTool
//< 将/替换为\\才能正确识别路径
# replace函数的第一个参数必须是大写!
DESTDIR_WIN = $$replace(DESTDIR, "/", "\\")
PWD_WIN = $$replace(PWD, "/", "\\")
QMAKE_POST_LINK += $$escape_expand(\\n) xcopy \"$$PWD_WIN\\dfu\\*.*\" \"$$DESTDIR_WIN\\dfu\\\" /S/Y $$escape_expand(\\n)
}
实际使用
//< 地面站文件MainWindow.cc
//< "./"相对路径 与 QDir::currentPath() 绝对路径相同
//< 路径(D:\Qt-Project\build-******-Desktop_Qt_5_9_3_MSVC2015_64bit-Debug)
QString program = QString("./dfu/DfuSe.exe");
QProcess *_process = new QProcess;
_process->start(program);
./dfu/Dfuse.exe 可启动外部程序是因为在 WindowsTool.pri文件中,将外部程序拷贝至Debug下(Debug模式)
推荐大神关于cmake的文章
https://zhuanlan.zhihu.com/p/67458422?utm_source=com.youdao.note