子目录中的头文件(例如gtk/gtk.h vs gtk-2.0/gtk/gtk.h)

Ray*_*y2k 4 c linux header build include

我正在尝试使用GTK构建一个hello world,其中包括以下行:

#include <gtk/gtk.h>
Run Code Online (Sandbox Code Playgroud)

正如你所料.

提供的Makefile有以下行:

GTK_INCLUDE = -I/usr/local/include
Run Code Online (Sandbox Code Playgroud)

所以它希望在/usr/local/include/gtk/gtk.h中找到gtk.h.但是在我的系统上,它位于/usr/local/include/gtk-2.0/gtk/gtk.h中,即位于版本的子目录中.

显然,在这种情况下,我可以将-I/usr/local/include/gtk-2.0添加到Makefile中,但同样的问题也会出现与gtk.h的依赖关系等等.

有没有一个很好的方法来解决这个问题?可以配置用于查找头文件的位置并添加适当的包含目录吗?我对配置几乎一无所知,但它似乎在构建时找到了关于系统的事情,这就是我所追求的.

这是一个常见的事件,还是我有一些怪异的目录结构,这是真正的问题?

感谢您的任何指示!

Ces*_*arB 8

您需要使用pkg-config以获取包含路径:

$ pkg-config --cflags gtk+-2.0
-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/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12
Run Code Online (Sandbox Code Playgroud)

您还必须使用它来获取库:

$ 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 -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0
Run Code Online (Sandbox Code Playgroud)

(这些命令的输出将根据您的发行版而有所不同,并且始终是您的发行版的正确选项.)