亲宝软件园·资讯

展开

qt creator源码全方面分析(3-5)

codeForFamily 人气:3
[TOC] # qtcreatorlibrary.pri 上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件都介绍一遍。首先为qtcreatorlibrary.pri。 ## 使用实例 为了分析这个文件,我们找个使用该pri的例子,源目录\src\libs\cplusplus\cplusplus.pro ``` DEFINES += NDEBUG unix:QMAKE_CXXFLAGS_DEBUG += -O2 win32:QMAKE_CXXFLAGS_DEBUG += -O2 include(../../qtcreatorlibrary.pri) include(cplusplus-lib.pri) ``` 以及依赖项,源目录\src\libs\cplusplus\cplusplus_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](https:/https://img.qb5200.com/download-x/doc.qt.io/qt-5/qmake-variable-reference.html#dlldestdir) >注意:此变量仅适用于Windows目标。 > >指定要将目标dll复制到的位置。 [DESTDIR](https:/https://img.qb5200.com/download-x/doc.qt.io/qt-5/qmake-variable-reference.html#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)](https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-3-2.html)。 这里重点提示下,第一步加载的依赖文件中,设置了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)](https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-3-2.html)。 3. 设定输出类型,为共享lib库。 4. 设置隐藏导出符号选项。 5. 设置安装路径。 ## 结果 在构建目录中,我们在DLLDESTDIR和DESTDIR指定的两处地方找到了编译得到的库。 我们在cplusplus.pro包含qtcreatorlibrary.pri,在pri中加载cplusplus_dependencies.pri,然后加载qtcreator.pri,并在其中解决依赖,最终加载utils_dependencies.pri,项目目录架构结果如下。 ------ **`原创造福大家,共享改变世界`** **`献出一片爱心,温暖作者心灵`** ------

加载全部内容

相关教程
猜你喜欢
用户评论