Documentation Documentation
主页
指南
DTK
经验分享
社区作品
关于
  • 简体中文
  • English
  • Español
GitHub (opens new window)

Deepin

Deepin 社区文档
主页
指南
DTK
经验分享
社区作品
关于
  • 简体中文
  • English
  • Español
GitHub (opens new window)
  • Dtk文档总集合
  • 接口changelog
  • UOS-Deepin 中配置 DTK 开发环境
  • Dtk的历史起源、发展,和简单入门
  • Dtkcore提供的单例类DSingleton的用法
  • Dtk自动保存主题
  • 主题相关知识集锦
  • Dtk播放系统音效
  • 如何实现单例进程
  • DSettingsDialog使用json创建对话框及其国际化
  • DLabel的ElideMode
  • Dtkcore的DExportedInterface接口的用途
  • 判断是否社区版、如何显示 Logo 以及获取发行版名称
  • Dtk 前期准备、绘画 Qt 自带控件、创建及绘画自定义控件
  • Dtk 常用、测试代码片
  • 使用 DDesktopEntry 解析 desktop 文件
  • Dtk加载翻译文件
  • Dtk 日志管理
  • Dtk相关配置目录
  • DTK 对 pkg-config 命令的支持
    • Pkg-config 命令介绍
      • pkg-config 的作用
      • 支持 pkg-config 查找机制
      • pc 文件规范
      • pkg-config 常用命令
    • DTK 支持 pkg-config
    • DTK 支持 cmake
      • make 之 find_package 用法
      • find_package 原理
      • DTK 对 cmake 的 find_package 支持
  • DDesktopServices的使用
  • Dtk汉字转拼音
  • 清空回收站
  • DPathBuf拼接路径
  • 如何调用外部程序
  • DAnchors的使用
  • DBlurEffectWidget的使用
  • 窗口模糊效果
  • Codeanalysis工具的使用
  • 代码格式化脚本pre-commit
  • Qt5 GUI程序界面启动耗时统计工具
  • Scrollbar 设置为上下(左右)不到顶端
  • DAbstractUnitFormatter 单位格式化工具
  • Dtk-translate工具
  • DSettings 工具
  • Deepin-os-release 工具
  • Dlistview DViewItemActionsetwidget 用法
  • DTK问题判定方法
  • 题栏菜单没有「帮助」菜单项
  • DBackgroundGroup 移除一项后,下边的圆角没有刷新
  • 在标题栏拖动鼠标出现无法拖动窗口的问题
  • 锁屏状态下音乐播放控件状态异常
  • 应用图标异常
  • 为什么bug状态为已解决,验证依旧不通过
  • 为何我的标题栏右键菜单的背景色与应用窗口颜色不一致
  • DTK 基础教程:自定义控件规范
  • 制作 dde-control-center 插件
  • DTK
Deepin | Any developer
2020-12-11

DTK 对 pkg-config 命令的支持

DTK 对 pkg-config 命令的支持

[TOC]

# Pkg-config 命令介绍

# pkg-config 的作用

在使用第三方库开发程序的时候,编译和链接阶段需要指定库的头文件和库文件的位置。如果库文件的和头文件的数量很多,手动指定会很繁琐,这个时候 pkg-config 就可以站出来了。

范例:使用库 dtkcore 编译程序

g++ main.c `pkg-config --cflags --libs dktcore` -o main

参数 --cflags:指定头文件;--libs:指定库文件。


# 支持 pkg-config 查找机制

当我们开发了一个新的第三方库,需要编写自己库的 .pc 文件放在特定目录下;这样 pkg-config 命令可以解析 XXX.pc 文件知道第三方库的头文件和库文件的位置。


# pc 文件规范

  • Name: 一个针对library或package的便于人阅读的名称。这个名称可以是任意的,它并不会影响到pkg-config的使用,pkg-config是采用pc文件名的方式来工作的。
  • Description: 对package的简短描述。
  • URL: 人们可以通过该URL地址来获取package的更多信息或者package的下载地址。
  • Version: 指定package版本号的字符串。
  • Requires: 本库所依赖的其他库文件。所依赖的库文件的版本号可以通过使用如下比较操作符指定:=,<,>,<=,>=。
  • Requires.private: 本库所依赖的一些私有库文件,但是这些私有库文件并不需要暴露给应用程序。这些私有库文件的版本指定方式与Requires中描述的类似。
  • Conflicts: 是一个可选字段,其主要用于描述与本package所冲突的其他package。版本号的描述也与Requires中的描述类似。本字段也可以取值为同一个package的多个不同版本实例。例如: Conflicts: bar < 1.2.3, bar >= 1.3.0。
  • Cflags: 编译器编译本package时所指定的编译选项,和其他并不支持pkg-config的library的一些编译选项值。假如所需要的library支持pkg-config,则它们应该被添加到Requires或者Requires.private中。
  • Libs: 链接本库时所需要的一些链接选项,和其他一些并不支持pkg-config的library的链接选项值。与Cflags类似。
  • Libs.private: 本库所需要的一些私有库的链接选项。

# pkg-config 常用命令

pkg-config --list-all 列出所有可使用的连接库

pkg-config --cflags XXX 取得该连接库的 CFLAGS 参数。(Cflags)

pkg-config --libs XXX 取得该连接库的 LDFLAGS 参数。(Libs)

pkg-config --version 取得 pkg-config 版本号。


# DTK 支持 pkg-config

在安装 DTK 开发库时,会在指定的目录下安装对应项目的 .pc 文件。

libdtkwidget-dev` 对应的 .pc 文件和所在目录 `/usr/lib/x86_64-linux-gnu/pkgconfig/dtkwidget.pc
libdtkcore-dev` 对应的 .pc 文件和所在目录 `/usr/lib/x86_64-linux-gnu/pkgconfig/dtkcore.pc
libdtkgui-dev 对应的` .pc 文件和所在目录 `/usr/lib/x86_64-linux-gnu/pkgconfig/dtkgui.pc

dtkwidget.pc 文件内容结构

prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include/libdtk-5.1.2/DCore/../DWidget

Name: DTKWIDGET
Description: Deepin Tool Kit dtkwidget header files
Version: 5.1.2.2
Libs: -ldtkwidget 
Cflags: -I${includedir}
Requires: dtkcore, dtkgui

dtkcore.pc 文件内容结构

prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include/libdtk-5.2.0/DCore


Name: DTKCORE
Description: Deepin Tool Kit dtkcore header files
Version: 5.2.0.1
Libs: -ldtkcore 
Cflags: -I${includedir}

dtkgui.pc 文件内容结构

prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include/libdtk-5.1.2/DCore/../DGui

Name: DTKGUI
Description: Deepin Tool Kit dtkgui header files
Version: 5.2.0.2
Libs: -ldtkgui 
Cflags: -I${includedir}
Requires: dtkcore

# DTK 支持 cmake

# make 之 find_package 用法

find_package(xxx REQUIRED) 如果找到 xxx 库,就可以在接下来使用 xxx_INCLUDE_DIRS 和 xxx_LIBRARIES 这两个变量,比如:

include_directories(${xxx_INCLUDE_DIRS})
target_link_libraries(exec ${xxx_LIBRARIES})

# find_package 原理

camke 搜索库并给变量赋值,依赖于 FindXXX.cmake 文件和 XXXConfig.cmake 文件。库的作者通常会提供这两个文件,以方便使用者调用。

find_package 采用两种模式搜索库:

  • Module 模式:搜索 CMAKE_MODULE_PATH 指定路径下的 FindXXX.cmake 文件,执行该文件从而找到 XXX 库。具体查找库并给 XXX_INCLUDE_DIRS 和 XXX_LIBRARIES 两个变量赋值的操作由 FindXXX.cmake 模块完成。
  • Config 模式:搜索 XXX_DIR 指定路径下的 XXXConfig.cmake 文件,执行该文件从而找到 XXX 库。具体查找库并给 XXX_INCLUDE_DIRS 和 XXX_LIBRARIES 两个变量赋值的操作由 XXXConfig.cmake 模块完成。

cmake 默认采用 Module 模式,如果 Module 模式未找到库,才会采用 Config 模式。


# DTK 对 cmake 的 find_package 支持

DTK 开发库在安装时,会安装对应的 cmake 文件,如下:

库名 libdtkwidget-dev

/usr/lib/x86_64-linux-gnu/cmake/DtkWidget/DtkWidgetConfig.cmake

库名 libdtkcore-dev

/usr/lib/x86_64-linux-gnu/cmake/Dtk/DtkConfig.cmake
/usr/lib/x86_64-linux-gnu/cmake/DtkCMake/DtkCMakeConfig.cmake
/usr/lib/x86_64-linux-gnu/cmake/DtkCore/DtkCoreConfig.cmake
/usr/lib/x86_64-linux-gnu/cmake/DtkTools/DtkToolsConfig.cmake

库名 libdtkgui-dev

/usr/lib/x86_64-linux-gnu/cmake/DtkGui/DtkGuiConfig.cmake
帮助编辑此页 (opens new window)
上次更新: 12/17/2020, 2:23:36 AM
Dtk相关配置目录
DDesktopServices的使用

← Dtk相关配置目录 DDesktopServices的使用→

Theme by Vdoing | Copyright © 2020-2021 Deepin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式