1

autotools ではどこにも行けなかったので、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

ParseConfig()関数は主にライブラリの検出を目的としていることがSConsのドキュメントからわかるように、「-I」パスにParseFlags()関数を使用してみてください。

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 に答える