zoukankan      html  css  js  c++  java
  • qt creator源码全方面分析(3-5)

    qtcreatorlibrary.pri

    上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件都介绍一遍。首先为qtcreatorlibrary.pri。

    使用实例

    为了分析这个文件,我们找个使用该pri的例子,源目录srclibscpluspluscplusplus.pro

    DEFINES += NDEBUG
    unix:QMAKE_CXXFLAGS_DEBUG += -O2
    win32:QMAKE_CXXFLAGS_DEBUG += -O2
    
    include(../../qtcreatorlibrary.pri)
    include(cplusplus-lib.pri)
    

    以及依赖项,源目录srclibscpluspluscplusplus_dependencies.pri

    QTC_LIB_NAME = CPlusPlus
    QTC_LIB_DEPENDS += 
        utils
    INCLUDEPATH *= $$IDE_SOURCE_TREE/src/libs/3rdparty
    

    这里我们可以看见,设置了库名QTC_LIB_NAME和依赖的库名QTC_LIB_DEPENDS,这在qtcreator.pri中解析依赖时会用到的。

    上半部

    下面,我们来分析qtcreatorlibrary.pri,这里分为两部分来介绍。

    上半部分如下

    include($$replace(_PRO_FILE_PWD_, ([^/]+$), \1/\1_dependencies.pri))
    TARGET = $$QTC_LIB_NAME
    
    include(../qtcreator.pri)
    
    # use precompiled header for libraries by default
    isEmpty(PRECOMPILED_HEADER):PRECOMPILED_HEADER = $$PWD/shared/qtcreator_pch.h
    
    win32 {
        DLLDESTDIR = $$IDE_APP_PATH
    }
    
    DESTDIR = $$IDE_LIBRARY_PATH
    

    DLLDESTDIR

    注意:此变量仅适用于Windows目标。

    指定要将目标dll复制到的位置。

    DESTDIR

    指定放置目标文件的位置。

    例如:

    DESTDIR = ../../lib
    

    注意:支持的字符列表可能取决于所使用的构建工具。 特别是,括号不适用于make工具。

    1. 根据pro文件名获取对应的依赖文件,进行包含。

      _PRO_FILE_PWD_为包含该pri的pro所在的文件夹路径,([^/]+$)表示路径中最后一个分隔符后面的字符串,1为反向引用,代表所获取的第1个匹配的引用。

      示例:_PRO_FILE_PWD_为源目录/src/libs/cplusplus,包含文件为源目录/src/libs/cplusplus/cplusplus_dependencies.pri,匹配项为cplusplus。

    2. 设置库文件名。

      示例:CPlusPlus。

    3. 加载qtcreator.pri。

      具体内容见往期文章qt creator源码全方面分析(3-2)

      这里重点提示下,第一步加载的依赖文件中,设置了QTC_LIB_DEPENDS,那么在qtcreator.pri会进行依赖解析(utils库),并进行包含。

    4. 添加预编译头文件。

      示例:源目录/src/shared/qtcreator_pch.h。内容就是一些常用的统一的Qt头文件。

    5. 设置DLL目标文件夹。

      如果win32平台,且生成的目标是dll,则把该dll拷贝到IDE_APP_PATH中,即构建目录/bin。

    6. 设置目标文件夹。

      把生成的目标,输出到IDE_LIBRARY_PATH,即构建目录/lib/qtcreator。

    下半部

    下半部分如下

    osx {
        QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/Frameworks/
        QMAKE_LFLAGS += -compatibility_version $$QTCREATOR_COMPAT_VERSION
    }
    include(rpath.pri)
    
    TARGET = $$qtLibraryTargetName($$TARGET)
    
    TEMPLATE = lib
    CONFIG += shared dll
    
    contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
    
    win32 {
        dlltarget.path = $$INSTALL_BIN_PATH
        INSTALLS += dlltarget
    } else {
        target.path = $$INSTALL_LIBRARY_PATH
        INSTALLS += target
    }
    
    1. osx设置和rpath.pri,设置编译选项,略。

    2. 设定输出目标的文件名。

      这里调用了qtcreator.pri中定义的qtLibraryTargetName()函数,其实就是在debug模式下添加字符d,以区分release模式。函数分析见qt creator源码全方面分析(3-2)

    3. 设定输出类型,为共享lib库。

    4. 设置隐藏导出符号选项。

    5. 设置安装路径。

    结果

    在构建目录中,我们在DLLDESTDIR和DESTDIR指定的两处地方找到了编译得到的库。

    image-20200303205410364

    我们在cplusplus.pro包含qtcreatorlibrary.pri,在pri中加载cplusplus_dependencies.pri,然后加载qtcreator.pri,并在其中解决依赖,最终加载utils_dependencies.pri,项目目录架构结果如下。

    image-20200303205704054

    原创造福大家,共享改变世界

    献出一片爱心,温暖作者心灵


  • 相关阅读:
    VMWare 桥接模式
    什么是交叉编译,为什么要使用交叉编译
    最常用的四种大数据分析方法
    C#的Dispose模式复习
    Oracle Data Provider for .NET Support for Microsoft .NET Core
    微软发布了量子计算开发包
    关于Oracle分区表的理解
    html 中video标签视频不自动播放的问题
    input 修改placeholder颜色
    正则表达式 手机号验证、邮箱验证、6~16位数字加字母组合、身份证号码验证
  • 原文地址:https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-3-5.html
Copyright © 2011-2022 走看看