pkg-config命令的Makefile.am

摘要:
例如,通过Makefile调用pkg配置命令。pkg-config Returnmetainformationaboutinstalledlibraries(要使用lib库,请通过pkg-config生成必要的编译选项)Makefile中的示例:CFLAGS=`pkg-config--cflagsgtk+-2.0`LDFLAGS=`pkg config--libs-only L
 

举例:通过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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Postman高级应用——串行传参和动态传参详解(转发)【笔记】清北学堂图论专题day1-1基础图论下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux下c++动态库的生成及使用

文章来源于:http://hi.baidu.com/ablenavy/item/b498901c6826bbf587ad4e33 我的程序是一个类,在网上找了半天,都是c的例子,c++的类封装成静态库倒容易,可是如何封装成动态库,在其它程序中调用呢?Linux下的动态链接库叫so,即Shared Object,共享对象。一些函数就不说了,网上多的是。把我遇...

Oracle-OGG,双向同步过滤OGG自身用户的DML失效,如何处理?

一、问题,OGG,双向同步过滤OGG自身用户的DML失效,如何处理? TRANLOGOPTIONS EXCLUDEUSER pdbodb.C##OGG1双向复制每个抽取进程配置这个参数,过滤OGG用户产生的DML操作进行屏蔽,否则无限循环复制!如果不好使了呢? 某个链路的过滤参数失效? 二、尝试使用其它参数进行过滤 2.1 EXCLUDEUSERID  测...

Linux使用PAM锁定多次登陆失败的用户(重置次数)原理后续补充----

  linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁。Linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁定用户。 1、 vim /etc/pam.d/sshd    (远程ssh)   限制用户远程登录   在#%PAM-1.0的下面,即第二行,添加内容,一定...

wait,waitpid学习测试

wait,waitpid学习测试 任务详情 1 用man wait, man waitpid学习wait waitpid的使用 2 写出wait 的测试代码,要能说明你理解了wait 的返回值的每一位的含义 实验步骤 1.用man wait, man waitpid学习wait waitpid的使用 使用man 2 wait可以看到函数原型,其中可以看到在2...

md /mdd /ml /mt/mtd

VC编译选项 多线程(/MT)多线程调试(/MTd)多线程 DLL (/MD)多线程调试 DLL (/MDd)C 运行时库                        库文件Single thread(static link) ML            libc.libDebug single thread(static link) MLd      ...

virt viewer Usbredir USB重定向

编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的。 virt viewer对spice-gtk的依赖关系,可以从virt viewer的configure结果看出来: [html]view plaincopy confi...