Scons没有将CCFLAGS传递给gcc

时间:2013-01-01 12:51:57

标签: python gcc scons

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

在我的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标志,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分: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)
...