pkg-config命令的Makefile.am
举例:通过Makefile调用pkg-config命令。
pkg-config - Return metainformation about installed libraries
(为了使用lib库,通过pkg-config生成必要的编译options)
Makefile中的例:
CFLAGS = `pkg-config --cflags gtk+-2.0`
LDFLAGS = `pkg-config --libs-only-L gtk+-2.0`
LIBS = `pkg-config --libs-only-l gtk+-2.0`
其中的 ` 符号,不是单引号。而是和~符号为同一按键的那个符号!!!# ``
Makefile.am中的例:
AM_CFLAGS = `pkg-config --cflags gtk+-2.0`
AM_LDFLAGS = `pkg-config --libs gtk+-2.0`
已经登录的lib库的列表表示
$ pkg-config --list-all
这里使用了程序 pkg-config,可以从 www.freedesktop.org 得到。这个程序读取 GTK 附带的 .pc 文件来决定编译 GTK 程序需要的编译选项
gtk+-2.0.pc文件的位置是
Cygwin的话 :/lib/pkgconfig/gtk+-2.0.pc
Linux(ubuntu)的话:/usr/lib/pkgconfig/gtk+-2.0.pc
C是一种编译语言, 需要使用gcc编译器把源代码转换为二进制可执行代码。
为了让gcc知道GTK+链接库位置以及编译标识,我们使用pkg‐config。
当我们安装GTK+开发包时, 一个叫"gtk+-2.0.pc"的配置文件也安装了, 它告诉pkg‐config我们系统上安装的GTK+库版本以及包含文件位置等信息。
lb@ubuntu:~$ pkg-config --modversion gtk+-2.0
2.18.3
lb@ubuntu:~$
终端输出将是你安装的GTK+版本号。
现在来看编译GTK+应用程序时需要的编译器标识:
lb@ubuntu:~$ pkg-config --cflags gtk+-2.0
-D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
lb@ubuntu:~$
输出将是一堆的 ‐I 开关选项指出编译器使用的包含文件。
这能让gcc知道到哪去找我们应用程序中"#include"所列出的包含文件。
每当使用了"#include"并引用了非标准C库头文件时, 都需要使用"I/path/to/library"选项传
给gcc。这些库可以装在不同的地方,这根据分发要求,操作系统或使用者意愿来定。
而pkg‐config为我们掌控这一切。
lb@ubuntu:~$ pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0
lb@ubuntu:~$
-l 连接库文件。
补充:
pkg-config --cflags gmodule-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
lb@ubuntu:~$ pkg-config --libs gmodule-2.0
-Wl,--export-dynamic -lgmodule-2.0 -lglib-2.0
pkg-config命令的Makefile.am的更多相关文章
- make命令以及makefile
make命令以及makefile使用RCS与CVS进行源代码控制编写手册页使用patch与tar发布软件开发环境 多源代码的问题 当我们编写小程序时,许多人都是简单的在编辑后通过重新编译所有的文件重新 ...
- git config命令使用
1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...
- [转] git config命令使用第一篇——介绍,基本操作,增删改查
平时我们在使用git的时候,很少去关注其配置是如何,而在实际开发中,对git config这个命令的使用也并不是很多,但是配置对一个程序和项目来说都是很重要的,我们今天来看看git的配置以及git c ...
- 转 git config命令使用
. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大家 ...
- 深入学习Make命令和Makefile(上)
https://www.zybuluo.com/lishuhuakai/note/209302 深入学习Make命令和Makefile(上) make是Linux下的一款程序自动维护工具,配合make ...
- 简介make命令和makefile文件
一.为什么要用到 make 命令和 makefile 文件 在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令.如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于 ...
- git学习(二):git config命令
不同的git config操作不同的参数文件 git config --global // 配置用户目录下的.gitconfig那文件 git config --system // 配置系统级配置文件 ...
- make命令和makefile文件
make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录. makefile文件由一组依赖关系 ...
- make命令与Makefile(转载)
概述博客内容包含linux下make命令的使用与makefile的书写规则等,希望通过本文档使读者对make命令makefile文件有进一步了解,由于鄙人经验学识有限文档中会有描述不准确以及理解偏差, ...
随机推荐
- npm下载速度过慢的解决办法
第一种方式: 在cmd 输入指令:npm config set registry https://registry.npm.taobao.org 不建议使用cnpm! 设置完后,注意检查:输入指令:n ...
- STM32F412应用开发笔记之七:片上ADC的应用测试
在我们的应用项目中需要采集一些模拟量,这些量使用MCU自带的ADC就可以满足要求.在NUCLEO-F412ZG实验板上的STM32F412ZG有一个16通道的ADC,我们试验用它采集几个数据. 在NU ...
- CCF2014123集合竞价(C语言版)
问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量. 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s 表示一个 ...
- poj2823 单调队列初步
什么是单调队列:头元素一直是队列当中的最大值,队列中的值按照递减顺序排列,可以从末尾插入一个元素,或从两段删除元素 1.插入元素,为了保证队列的单调性(这里假设为递减性),在插入元素v时要将对位的元素 ...
- js事件监听
/* 事件监听器 addEventListener() removeEventListener() 传统事件绑定: 1.重复添加会,后添加的后覆盖前面的. */ 示例代码中的html结构: <b ...
- MyBatis查询,返回值Map或List<Map>
一.返回值Map 1.mapper.xml <select id="selectUserMapLimitOne" resultType="java.util.Has ...
- JQuery中的事件(三)
一:页面载入 ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执行的函数.这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度.简单地说,这个方法纯粹是对向wind ...
- 委托----Func和Action
平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后 ...
- 数据流分段下载(Http之 Range)
public FileStreamResult StreamUploadedSongs(int id) { byte[] song = db.UploadedSongs.Where(x => x ...
- openstack Too many open files错误
oopenstack突然web页面无法打开,页面报500错误,查看httpd日志报如下错误 [Fri Feb ::] [:error] [pid ] [remote ] IOError: [Errno ...