zoukankan      html  css  js  c++  java
  • QMake(Qt项目构建)

    qmake工具能够简化不同平台上的项目构建。可以自动产生Makefiles文件,仅仅需要少量的信息就可以生成Makefile文件。同时qmake也可以构建不是Qt的项目。qmake基于项目文件中的信息产生Makefile。qmake有一些支持Qt开发的额外特性,自动包含构建moc和uic的规则。qmake也可以生成一个VS工程。

    qmake工具提供了一个面向工程的系统,来管理应用、库和其它组件的构建流程。这种方法使您能够在单个文件内,控制所使用的源文件,并对流程中的每个步骤简明地描述。qmake扩展为Makafile来执行必要的编译和链接命令。

    一、 简单的项目构建

    使用qtcreator创建一个简单的工程,查看其pro文件:

     1 QT       += core gui
     2 
     3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
     4 
     5 TARGET = untitled
     6 TEMPLATE = app
     7 
     8 
     9 SOURCES += main.cpp
    10         mainwindow.cpp
    11     
    12 HEADERS  += mainwindow.h
    13 
    14 FORMS    += mainwindow.ui

     

    二、 主要参数介绍

    1、TARGET:目标文件名。

    2、TEMPLATE:生成的工程类型。

    app缺省类型,应用;lib库类型;subdirs在子文件夹中构建目标。

    3、CONFIG项目的配置和编译选项。

    release :release模式。

    debug:debug模式。

    debug_and_release:debug和release模式。

    debug_and_release_target:缺省选项。设置了debug_and_release模式,将在各自目录分开编译。

    build_all:如果选中了debug_and_release选项,缺省以debug和release两种模式构建。

    autogen_precompile_source 自动生成包含预编译头文件a.cpp。

    ordered 按顺序编译。

    precompile_header 支持预编译头的使用。

    warn_on

    warn_off

    exceptions  缺省。

    exceptions_off

    rtti 缺省。

    rtti_off

    stl 缺省。

    stl_off

    thread 当CONFIG包含qt时,缺省使用。

    c++11 编译器不支持c++11时,不影响。

    4 、HEADERS 头文件。

    5、SOURCES源文件。

    6、FORMS ui文件。

    7、RESOURCES  资源文件。

    8、LIBS 项目需要链接的库 -L指定库路径 -l指定库。

    9、INCLUDEPATH 包含文件路径。

    10、DESTDIR 目标文件路径。

    11、OBJECTS_DIR 中间文件路径。

    12、MOC_DIR moc文件路径。

    13、UI_DIR ui文件路径。

    14、RCC_DIR 资源文件路径。

    三、构建一个大型工程实例

           大型工程可能由多个动态库项目构成,首先需要构建一个总的pro,然后再构建各个动态库项目。

    1、总的pro。如下面所示,模板选择subdirs,SUBDIRS添加各个子pro文件,ordered按照顺序进行编译。

    TEMPLATE = subdirs
    
    SUBDIRS + =  ../a/a.pro 
        ../b/b.pro 
        ../c/c.pro 
    
    CONFIG + =debug_and_release ordered

    2、单个动态库项目构建。

    可以将构建文件分为.pro和.pri,在pri里面写

    头文件、源文件、UI文件以及资源文件等信息,pro文件里面写配置信息,在pro文件中包含pri。如下所示:

    1)target.pri文件

    HEADERS + = aa.h 
        bb.h
    SOURCES + = aa.cpp 
        bb.cpp
    FORMS + =  aa.ui 

    2)target.pro文件

    TEMPLATE = lib
    
    TARGET = target
    
    QT += cor gui xml
    
    DEFINES + = _DEBUG
    
    INCLUDPATH + = . 
    
        ./../../core
    
    LIBS + = -lcore
    
    UI_DIR += ./GeneratedFiles
    
    RCC_DIR += ./GeneratedFiles
    
     
    
    inlude(target.pri)
    
    CONFIG += debug_and_release plugin
    
    CONFIG(debug,debug|release){
    
        DESTDIR = ../../bin/Debug
    
        MOC_DIR += ./GeneratedFiles/Debug
    
        INCLUDEPATH += ./GeneratedFiles/Debug
    
        OBJECT_DIR += Debug
    
        LIBS += -L../../../bin/Debug -L../../../lib, -Wl,rpath-link,../../../bin/Debug
    
    }
    
    CONFIG(release,debug|release){
    
        DESTDIR = ../../bin/Release
    
        MOC_DIR += ./GeneratedFiles/Release
    
        INCLUDEPATH += ./GeneratedFiles/Release
    
        OBJECT_DIR += Release
    
        LIBS += -L../../../bin/Release -L../../../lib -Wl, rpath-link, ../../../bin/Release
    
    }
  • 相关阅读:
    Kubernetes实践踩坑系列(一).应用管理的难题
    基于Kubernetes服务发现机制的探讨Non Service
    Kubernetes中 Pod 是怎样被驱逐的?
    记一次JAVA进程导致Kubernetes节点CPU飙高的排查与解决
    .NET Core 3.0 可回收程序集加载上下文
    微服务日志之Spring Boot Kafka实现日志收集
    微服务日志之.NET Core使用NLog通过Kafka实现日志收集
    ASP.NET Core使用SkiaSharp实现验证码
    微软为.NET程序员带来了最优的跨平台开发体验-WSL
    讨论.NET Core 配置对GC 工作模式与内存的影响
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/8511030.html
Copyright © 2011-2022 走看看