1

我正在尝试使用 Scons 构建一个简单的 GTK C 应用程序(特别是一个 MATE 小程序),因为我无法使用自动工具。

在我的 SConstruct 文件中,我有这个:

env = Environment(tools=['default', 'scanreplace'], toolpath=['tools'])

env.ParseConfig('pkg-config --cflags --libs gtk+-2.0')
env.ParseConfig('pkg-config --cflags --libs glib-2.0')
env.ParseConfig('pkg-config --cflags --libs libmatepanelapplet-3.0')

应该找到正确的目录等。在终端中运行 pkg-config 可以正常工作,例如:

$ pkg-config --cflags --libs gtk+-2.0
-pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0

但是,当我运行 scons 时,这是输出的一部分:

gcc -o .build/resource-applet -pthread src/resource-applet.h .build/src/resource-applet.o -lmate-panel-applet-3 -lmateconf-2 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0
src/resource-applet.h:22:21: fatal error: gtk/gtk.h: No such file or directory

任何地方都没有 -I 标志,所以据我了解,gcc 找不到头文件。

那么为什么 scons 不给 gcc -I 标志,我能做些什么来解决它?

4

1 回答 1

0

尝试将ParseFlags()函数用于“-I”路径,因为从 SCons 文档中可以看出 ParseConfig()函数主要用于库检测。

要调试 SConscript 中的内容,您可以执行以下操作:

def populateEnv(env, packageName, debug=False):
    d = env.ParseFlags('!pkg-config --cflags --libs %s' % packageName)
    if debug:
        # print the dictionary

    if debug:
        # print the CCFLAGS, LIBPATH, and CPPPATH before calling MergeFlags()

    env.MergeFlags(d)

    if debug:
        # print the CCFLAGS, LIBPATH, and CPPPATH after calling MergeFlags()

    env.ParseConfig('pkg-config --cflags --libs %s' % packageName)

    if debug:
        # print the CCFLAGS, LIBPATH, and CPPPATH after calling ParseConfig()

...    
populateEnv(env, 'glib-2.0', True)
populateEnv(env, 'libmatepanelapplet-3.0', True)
populateEnv(env, 'gtk+-2.0', True)
...
于 2013-01-01T15:52:55.163 回答