Qt Creator指定临时文件生成目录(MOC_DIR/RCC_DIR等)和PWD/OUT_PWD/.pro官方文档

简介: Qt Creator指定临时文件生成目录(MOC_DIR/RCC_DIR等)和PWD/OUT_PWD/.pro官方文档

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/


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

相关文章
|
4月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
39 0
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
97 0
|
3月前
|
IDE 开发工具 C++
qt creator + vs2019编译记录
本文记录了作者在使用qt creator和vs2019编译项目时遇到的困难和解决方案,包括编译环境设置、qt creator编译脚本的成功案例、不带Ninja的编译脚本问题、错误示范以及相关参考链接。
qt creator + vs2019编译记录
|
4月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
791 4
|
4月前
|
XML 开发框架 API
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
187 1
|
4月前
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
853 0
|
4月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
190 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。