我正在尝试使用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标志,我该怎么做才能解决它?
答案 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)
...