举例:通过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的更多相关文章

  1. make命令以及makefile

    make命令以及makefile使用RCS与CVS进行源代码控制编写手册页使用patch与tar发布软件开发环境 多源代码的问题 当我们编写小程序时,许多人都是简单的在编辑后通过重新编译所有的文件重新 ...

  2. git config命令使用

    1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...

  3. [转] git config命令使用第一篇——介绍,基本操作,增删改查

    平时我们在使用git的时候,很少去关注其配置是如何,而在实际开发中,对git config这个命令的使用也并不是很多,但是配置对一个程序和项目来说都是很重要的,我们今天来看看git的配置以及git c ...

  4. 转 git config命令使用

    . git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大家 ...

  5. 深入学习Make命令和Makefile(上)

    https://www.zybuluo.com/lishuhuakai/note/209302 深入学习Make命令和Makefile(上) make是Linux下的一款程序自动维护工具,配合make ...

  6. 简介make命令和makefile文件

    一.为什么要用到 make 命令和 makefile 文件 在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令.如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于 ...

  7. git学习(二):git config命令

    不同的git config操作不同的参数文件 git config --global // 配置用户目录下的.gitconfig那文件 git config --system // 配置系统级配置文件 ...

  8. make命令和makefile文件

    make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录. makefile文件由一组依赖关系 ...

  9. make命令与Makefile(转载)

    概述博客内容包含linux下make命令的使用与makefile的书写规则等,希望通过本文档使读者对make命令makefile文件有进一步了解,由于鄙人经验学识有限文档中会有描述不准确以及理解偏差, ...

随机推荐

  1. 实现div里的内容垂直居中

    ---恢复内容开始--- 在项目中我们会遇到这种情况,一个div的宽固定,里面的内容长度不定,不管是一行还是多行,都要垂直居中,有俩个实现方法: 1.使用absolute,top:50%,transf ...

  2. Java基础99 待续

    1.待续 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/107 ...

  3. git填坑笔记

    Counting objects: 3, done.Writing objects: 100% (3/3), 203 bytes | 0 bytes/s, done.Total 3 (delta 0) ...

  4. 遍历集合的Iterator删除其中的元素

    package list; import java.util.LinkedList; /* * 遍历集合的时候删除其中的元素 从后往前删,每次都删除的是最后一个元素,不涉及移位 */public cl ...

  5. BZOJ 4767 两双手

    题解: 发现这种题目虽然可以想出来,但磕磕碰碰得想挺久的 根据数学可以知道组成方案是唯一的(集合) 然后发现每个使用的大小可能是接近n^2的 直接dp(n^4)是过不了的 那么先观察观察 我们可以把每 ...

  6. ubuntu axel

    ubuntu下rar解压工具安装方法: 压缩功能 安装 sudo apt-get install rar 卸载 sudo apt-get remove rar 解压功能 安装 sudo apt-get ...

  7. Codeforces 449C Jzzhu and Apples 贪心 (看题解)

    Jzzhu and Apples 从大的质因子开始贪心, 如果有偶数个则直接组合, 如果是奇数个留下那个质数的两倍, 其余两两组合. #include<bits/stdc++.h> #de ...

  8. 【Java】 剑指offer(53-3) 数组中数值和下标相等的元素

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 假设一个单调递增的数组里的每个元素都是整数并且是唯一的.请编程 ...

  9. hdu 1251:统计难题[【trie树】||【map】

    <题目链接> 统计难题                        Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131 ...

  10. P1025 数的划分

    P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i ...