1、指定临时文件
Qt Creator默认情况下把所有的编译中间文件都生成到debug和release文件夹里。可以在.pro文件中加入:
MOC_DIR = temp/moc
RCC_DIR = temp/rcc
UI_DIR = temp/ui
OBJECTS_DIR = temp/obj
这样,编译时生成的临时文件就按不同类型分类放到项目下的temp文件夹中了。
2、指定库文件路径PWD/OUT_PWD/_PRO_FILE_/_PRO_FILE_PWD_
PWD
指的是当前正在解析的.pro文件的目录的完整路径。 在编写支持影子构建的项目文件时,PWD很有用。
message($$PWD)
OUT_PWD
指的是qmake生成的Makefile的目录的完整路径。即构建目录,例如build-??-Desktop_Qt_5_12_8_MSVC2017_64bit-Debug
message($$OUT_PWD)
_PRO_FILE_
正在使用的项目文件的路径。
message($$_PRO_FILE_)
_PRO_FILE_PWD_
包含目录的路径,该目录包含正在使用的项目文件。
message($$_PRO_FILE_PWD_)
如何区分这4个变量?
qmake的若干与路径相关的变量,如何区分它们?
PWD
.pro或.pri所在路径,注意区分_PRO_FILE_PWD_
_PRO_FILE_PWD_
pro文件所在路径(注意:即使它在pri文件内,也是指代的包含它的pro所在的路径)
_PRO_FILE_
pro的全路径
OUT_PWD
makefile所在路径,和_PRO_FILE_PWD_对应
#当不使用shadow build构建时,OUT_PWD和_PRO_FILE_PWD_是相同的.
#据此,我们可以判断采用了何种构建方式,进而采用不同的动作:
!contains(_PRO_FILE_PWD_, $${OUT_PWD}) {
#do something when using shadow build
}
#不建议使用contains,而是直接使用equals更好些,但是manual对此没有任何说明,
!equals(_PRO_FILE_PWD_, OUT_PWD) {
#do something when using shadow build
}
#打印测试
message("PWD=") message($$PWD) message("OUT_PWD=") message($$OUT_PWD) message("_PRO_FILE_=") message($$_PRO_FILE_) message("_PRO_FILE_PWD_=") message($$_PRO_FILE_PWD_)
另外,也可以指定目标文件的路径
Debug:DESTDIR = $$PWD/../bin_d
Release:DESTDIR = $$PWD/../bin
LIBS += -L folderPath //引入的lib文件的路径 -L:引入路径
Debug:LIBS+= -L folderPath // Debug 版引入的lib 文件路径
Release:LIBS+= -L folderPath // release 版引入的lib文件路径
DEPENDPATH:工程的依赖路径
INCLUDEPATH:指定工程要用到的头文件路径,一般包括用户自定义的头文件路径或没有放入系统头文件路径的头文件路径
CONFIG(debug, debug|release):LIBS += -L../lib1 -lhellod
CONFIG(release, debug|release):LIBS += -L../lib2 -lhello
例如:
INCLUDEPATH += "muparser/include" #firecat modify DEPENDPATH += "muparser/lib" LIBS += "F:\CADCAM\QCAD\src\LibreCAD-v1.0.4\generated\lib\muparser.lib" lib举例 #生成lib DLL_NAME = muparser win32:CONFIG(debug, debug|release) { TARGET = $${DLL_NAME}d } else { TARGET = $$DLL_NAME } #添加lib win32:CONFIG(debug, debug|release): { LIBS += "../bin/lib/muparserd.lib" } else:win32:CONFIG(release, debug|release): { LIBS += "../bin/lib/muparser.lib" } #通用公式 defineReplace(qtLibraryName) { unset(LIBRARY_NAME) LIBRARY_NAME = $$1 CONFIG(debug, debug|release) { !debug_and_release|build_pass { mac:RET = $$member(LIBRARY_NAME, 0)_debug else:win32:RET = $$member(LIBRARY_NAME, 0)d } } isEmpty(RET):RET = $$LIBRARY_NAME return($$RET) } #大写的L表示路径;小写的l表示库文件 LIBS += -L$${DESTDIR} #lib path LIBS *= -l$$qtLibraryName(ribbonTabbar) 关于defineReplace的详情,请见文章末尾的姊妹篇。 绝对路径: QSKIALIB_PATH = ../$$DESTDIR message($$absolute_path($$QSKIALIB_PATH))
3、分享我个人的.pro工程文件
#qt引用模块核心功能,界面,网络,串口 QT += core gui network sql serialport widgets #这是Qt5为了兼容Qt4而专门设计的 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #工程所使用的模版;app表示是应用程序;lib则表明是库 TEMPLATE=app #临时文件存放位置 MOC_DIR = temp/moc #指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录 RCC_DIR = temp/rcc #指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录 UI_DIR = temp/ui #指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录 OBJECTS_DIR = temp/obj #指定目标文件(obj)的存放目录 #指定生成的应用程序放置的目录 #DESTDIR = bin #指定生成的应用程序放置的目录 IDE_SOURCE_TREE = $$PWD #.pro或.pri文件所在的位置 IDE_BUILD_TREE = $$IDE_SOURCE_TREE/../ win32:CONFIG(debug, debug|release){ contains(DEFINES, WIN64) { DESTDIR = $$IDE_BUILD_TREE/_debug64 } else { DESTDIR = $$IDE_BUILD_TREE/_debug86 } } else:win32:CONFIG(release, debug|release){ contains(DEFINES, WIN64) { DESTDIR = $$IDE_BUILD_TREE/_release64 } else { DESTDIR = $$IDE_BUILD_TREE/_release86 } } macx:CONFIG(debug, debug|release){ DESTDIR = $$IDE_BUILD_TREE/_debug64 } else:macx:CONFIG(release, debug|release){ DESTDIR = $$IDE_BUILD_TREE/_release64 } #指定生成的应用程序名和图标 TARGET = Hello RC_ICONS = Hello.ico #定义编译选项 #QT_DEPRECATED_WARNINGS表示当Qt的某些功能被标记为过时的,那么编译器会发出警告 DEFINES += QT_DEPRECATED_WARNINGS #指定编译器选项和项目配置 CONFIG += c++11 CONFIG += warn_on #告诉qmake要把编译器设置为输出警告信息的 CONFIG += precompile_header #可以在项目中使用预编译头文件的支持 #预编译头文件路径 PRECOMPILED_HEADER = $$PWD/stable.h #disable C4819 warning win32:QMAKE_CXXFLAGS_WARN_ON += -wd4819 win32:QMAKE_CXXFLAGS += /FS #win32:QMAKE_CXXFLAGS += /utf-8 #避免VC编译器关于fopen等应使用fopen_s的安全警告 win32:DEFINES += _CRT_SECURE_NO_WARNINGS
4、分享我个人的预编译头文件stable.h
//#ifndef STABLE_H //#define STABLE_H // Add C includes here #include <cmath> #include <cstdlib> #include <ctime> #include <iomanip> #include <iostream> #include <math.h> #if defined __cplusplus // Add C++ includes here #include <algorithm> #include <string.h> #include <vector> using namespace std; // Qt includes #include <QtCore> #include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5, 0, 0)) #include <QtWidgets> #endif #ifndef max #define max(x, y) ((x) < (y) ? (y) : (x)) #define min(x, y) ((x) < (y) ? (x) : (y)) #endif //解决UTF-8编码中文乱码的问题 #ifdef _MSC_VER #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #pragma warning(disable : 4819) #endif // _MSC_VER >= 1600 #endif // _MSC_VER //扩展qDebug以文件行列记录信息 #define QLOG_DEBUG(msg) qDebug() << QString("[%1][%2][%3][%4]%5") \ .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")) \ .arg("DEBUG") \ .arg(QString("%1:%2:%3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__)) \ .arg(QThread::currentThread()->objectName()) \ .arg(msg); #define FIRLOG //FIRLOG::日志开关,注释关闭打印日志 #ifdef FIRLOG #define firecat_log qDebug() << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz") \ << "[DEBUG]" << __FILE__ << __LINE__ << __FUNCTION__ << "msg:" #else #define firecat_log qDebug() #endif #endif //__cplusplus //#endif // STABLE_H
5.Qt官网关于qmake和.pro文件详解
https://doc.qt.io/qt-5/cmake-manual.html
https://doc.qt.io/qt-5/qmake-manual.html
https://doc.qt.io/qt-5/qmake-project-files.html
https://doc.qt.io/qt-5/qmake-common-projects.html
https://doc.qt.io/qt-5/qmake-language.html
https://doc.qt.io/qt-5/qmake-precompiledheaders.html
https://doc.qt.io/qt-5/qmake-environment-reference.html
https://doc.qt.io/qt-5/qmake-variable-reference.html 官方.pro文件的变量清单,多关注QMAKE_CXXFLAGS
win32:QMAKE_CXXFLAGS += /FS
https://doc.qt.io/qt-5/qmake-test-function-reference.html
Log4Qt的基本使用Qt高级——QMake用户指南
6.姊妹篇
欢迎访问姊妹篇《Qt .pro文件之defineReplace函数的用法,实现lib文件名自动添加后缀"d"》
欢迎访问姊妹篇《关于Qt Creator项目中.pro文件中的相对路径》
---
参考文献
https://blog.csdn.net/a15005784320/article/details/98480663
————————————————
版权声明:本文为CSDN博主「libaineu2004」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/libaineu2004/article/details/89366925