qt中.pro文件详细说明

        工程上需要使用QT框架进行项目开发,.pro文件里面的具体配置方式比较模糊。详细整理文件里各配置项的含义,并对其编写方法进行归纳总结。

目录

1、配置项说明

1.1、注释 #

1.2、添加/排除QT项目模块 QT +=  / QT -= 

1.3、模板 TEMPLATE

1.4、指定目标文件名 TARGET

1.5、配置应用程序信息 CONFIG

1.6、指定源文件 SOURCES

1.7、指定头文件 HEADERS

1.8、指定引入的lib文件 LIBS

1.9、指定工程头文件 INCLUDEPATH

1.10、其他

2、条件编译

2.1、平台相关性处理

2.2、如果一个文件不存在,停止qmake

2.3、检查多于一个的条件

3、makefile与.pro转换

3.1、生成Makefile

3.2、生成.pro

4、.pro文件特殊路径

4.1、当前文件路径 PWD

4.2、路径中含空格 $$quote

5、.pro文件配置实例


1、配置项说明

1.1、注释 #

        从#开始,到这一行的结束。

1.2、添加/排除QT项目模块 QT +=  / QT -= 

        QT += 配置项:添加QT项目需要的模块;

        QT -= 配置项:排除某个模块。

1.3、模板 TEMPLATE

        TEMPLATE = 模板变量。告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:

        app:建立一个应用程序的makefile,这个是默认值,若模块项未指定,将默认使用此项;

        lib:建立一个库的makefile;

        vcapp:建立一个应用程序的VisualStudio项目文件;

        vclib:建立一个库的VisualStudio项目文件;

        subdirs:这是一个特殊的模板,可以创建一个可进入特定目录并为一个项目文件生成makefile,此makfile可以调用make。

1.4、指定目标文件名 TARGET

        TARGET = 程序名称。指定最后生成的目标应用程序的名称,如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称。

TARGET = filename 

1.5、配置应用程序信息 CONFIG

        CONFIG += : 告诉qmake关于应用程序的配置信息,使用+=表示在现有的配置上添加,这样会更安全。比如,CONFIG += qt warn_on release 其具体的意义为:

        qt :告诉qmake此程序是使用qt来连编的。即qmake在连接、为编译添加所需包含路径时会考虑qt的库

        warn_on :告诉qmake要将编译器设置为输出警告信息形式;

        release :告诉qmake应用程序必须被连编为一个可发布的应用程序。开发过程中,也可以使用debug;

1.6、指定源文件 SOURCES

        SOURCES += : 指定工程中包含的源文件。

正则表达式表示:

SOURCES = *.cpp 

多个源文件:

        对于多源文件,可用空格分开,如:SOURCES = 1.cpp 2.cpp3.cpp或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:   

SOURCES = hello.cpp   \
     main.cpp 

+=冗长写法:

        一个更冗长的方法是单独地列出每一个文件,就像这样:

SOURCES+= hello.cpp  
SOURCES +=main.cpp 

        这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。

1.7、指定头文件 HEADERS

        HEADERS += : 指定工程中所包含的头文件。

        写法与源文件写法一致。

1.8、指定引入的lib文件 LIBS

        LIBS += : 指定引入的lib文件(.lib或.so)的路径。通常用Unix风格,大写的L表示“路径”,小写的l表示“库文件名字”。根据不同的版本可以分为两种形式:

unix:

    Release: LIBS += -L folder Path //release版本引入的lib文件

    Debug: LIBS += -L folder Path //debug版本引入的lib文件

uwin32:

    Release: LIBS += folder Path //release版本引入的lib文件

    Debug: LIBS += folder Path //debug版本引入的lib文件

1.9、指定工程头文件 INCLUDEPATH

        INCLUDEPATH += : 指定工程所需要的头文件。

        列出工程中 #include 项需要搜索的路径,即头文件的路径。多个路径用空格隔开。如果路径本身包含空格,则需要用双引号引起来。

        INCLUDEPATH = c:/msdev/include d:/stl/include win32:INCLUDEPATH += "C:/mylibs/extra headers"

1.10、其他

        $$: 取变量的值。

        UIC_DIR += : 指定uic命令,将.ui文件转化为ui_*.h文件存放的目录。

        RCC_DIR += : 指定rcc命令,将.qrc文件转换成qrc_*.h文件存放的目录。

        MOC_DIR += : 指定moc命令,将含有Q_OBJECT的头文件转换成标准.h文件存放的目录。

        OBJECTS_DIR += : 指定目标文件obj的存放目录。

        CODECFORSRC += : 指定源文件的编码格式。

        RESOURCES += : 指定工程中所包含的资源文件。

        DESTDIR += :用来指定目标的生成路径。

        INTERFACES += :添加界面文件(ui)。

        QT += : 指定工程中使用的Qt的模块。默认情况下会使用Qt 的core和gui模块。如:QT += core gui。

        DEFINES += : 用来定义编译选项。

        qmake添加该字段指定的全局宏定义。VS中也有类似的全局宏定义,在.dll工程中经常用到,来指定是 dllexport 还是 dllimport 。

DEFINES += FUNDLL_LIBRARY

        在头文件中使用上述宏定义:

#if defined(FUNDLL_LIBRARY)
#  define FUNDLLSHARED_EXPORT __declspec(dllexport)
#else
#  define FUNDLLSHARED_EXPORT __declspec(dllimport)
#endif

        FORMS += : 指定工程中的ui文件。

        列出工程中使用的UI文件(xml格式),这些文件会在编译之前被 uic(User Interface Compile,UI编译器) 处理。构建UI文件是所需的依赖项、头文件、源文件等都会自动被添加到工程中。

        UIC会把 .ui(xml格式)文件转换成C++的 .h 文件(通常叫Ui_dialog.h)。其实是在.h文件里定义一个类,里面包含了UI文件中的所以元素/对象。

FORMS = mydialog.ui \
      mywidget.ui \
          myconfig.ui

        DEPENDPATH += : 指定工程的依赖路径。

        列出依赖项所在的路径。当处理included文件时会使用该项。感觉它就是INCLUDEPATH.

INCLUDEPATH += $$PWD/../mydll
DEPENDPATH += $$PWD/../mydll

2、条件编译

2.1、平台相关性处理

        我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:

win32 {  
    SOURCES += hello_win.cpp  
} 

unix{
}

        所以如果qmake运行在Windows上的时候,它就会把hello_win.cpp添加到源文件列表中。如果qmake运行在其它平台上的时候,它会很简单地把这部分忽略。

2.2、如果一个文件不存在,停止qmake

        如果某一个文件不存在的时候,你也许不想生成一个Makefile。我们可以通过使用exists()函数来检查一个文件是否存在。我们可以通过使用error()函数把正在运行的qmake停下来。这和作用域的工作方式一样。只要很简单地用这个函数来替换作用域条件。对main.cpp文件的检查就像这样:

!exists( main.cpp ) {  
  error( "No main.cpp file found")  
} 

        “!”用来否定这个测试,比如,如果文件存在,exists( main.cpp)是真,如果文件不存在,!exists( main.cpp )是真。

2.3、检查多于一个的条件

        假设你使用Windows并且当你在命令行运行你的应用程序的时候你想能够看到qDebug()语句。除非你在连编你的程序的时候使用console设置,你不会看到输出。我们可以很容易地把console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。但是如果告诉你我们只是想在当我们的应用程序运行在Windows下并且当debug已经在CONFIG行中的时候,添加console。这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成另一个。把设置放在最里面的作用域里,就像这样:

win32 {  
  debug {  
     CONFIG += console  
  }  
} 

        嵌套的作用域可以使用冒号连接起来,像这样:

win32:debug {  
    CONFIG += console  
} 

3、makefile与.pro转换

3.1、生成Makefile

        当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:

Makefile可以像这样由“.pro”文件生成:

qmake -oMakefile hello.pro 

        对于VisualStudio的用户,qmake也可以生成“.dsp”文件,例如:

qmake -tvcapp -o hello.dsp hello.pro 

        附加:

        .pro 文件预定义宏设置:

CONFIG(release, debug|release) {  
    DEFINES += MYRELEASE  
}  
else {  
    DEFINES += MYDEBUG  
} 

3.2、生成.pro

        cd到源码目录的CMakeLists.txt文件夹下。使用命令:

qmake -project 

        会生成一个*.pro文件,可以直接使用QT打开,一般情况下比使用QT直接打开cmakelist载入的信息全面。自己补充一部分就可以了。

4、.pro文件特殊路径

4.1、当前文件路径 PWD

        PWD表示当前.pro文件所在的路径。如:

INCLUDEPATH += $$PWD/../mydll

4.2、路径中含空格 $$quote

        quote处理带空格的路径。如:

INCLUDEPATH += $$quote(C:/Program Files (x86)/Windows Kits/8.1/Include/um)

5、.pro文件配置实例

 //添加QT依赖的库
QT += gui
QT += core xml: QT += widgets
 
//添加c11配置支持
CONFIG += c++11

//输出文件的名称
TARGET = YouAppName

//配置控制台输出
CONFIG += console

//输出类型application
TEMPLATE = app
 
//源文件
SOURCES += main.cpp \
    appconfig.cpp
 
//头文件
HEADERS += \
    appconfig.h \
    opendoorthread.h
 
//配置debug和release
CONFIG +=debug_and_release
CONFIG(debug,debug|release){
DESTDIR += $$PWD/debug
LIBS += -L$$PWD/debug/ -lThorModel
}else{
}

//需要的头文件
INCLUDEPATH += $$PWD/AllDLL/include
INCLUDEPATH += $$PWD/debug/3rdparty/opencv-2.4.10/include \
            $$PWD/debug/3rdparty/opencv-2.4.10/include/opencv \
            $$PWD/debug/3rdparty/opencv-2.4.10/include/opencv2
//ui
FORMS += \
    TestProject/testform.ui

        qmake非常方便、快捷,是一个轻量级的makefile生成工具,在使用该指令前要正确地编写.pro文件。

参考文档:

1、Qt开发中如何正确的编写.pro文件及详细说明 - 知乎

2、详解 QT 中.pro文件的写法-51CTO.COM

3、https://www.jianshu.com/p/682b9ab004c9

4、QT pro文件详细写法+实例 - 王会喜 - 博客园

传送门:deepstream系列文章分类整理

你可能感兴趣的:(ubuntu/tx2,deepstream,qt,python,linux,.pro,cmake)