2

GTK を必要とする Python の拡張モジュールがあります。GTK は他の多くのライブラリ (Glib、Cairo、Pango など) に依存しているため、GTK プログラムのコンパイルには通常、大量のリンケージが必要です。したがって、通常、次のpkg-configように、シェル展開 (バックティック) を使用しての出力を使用してコンパイルします。

gcc -p-O2 -Wall myprogram.c -o myprogram `pkg-config --cflags gtk+-3.0` `pkg-config --cflag `pkg-config --libs gtk+-3.0`

しかし、何らかの理由で、module.extra_compile_argsdistutils に渡された引数でシェル展開を使用すると、BASH が実際には式を展開しないため、エラーが発生します。

module = Extension('mymodule',
        sources = ['mymodule.c'])

module.extra_compile_args = ['`pkg-config --cflags gtk+-3.0`', 
        '`pkg-config --libs gtk+-3.0`'];

これにより、次のようなエラーが発生します。

gcc: error: `pkg-config --cflags gtk+-3.0`: No such file or directory

それで、これを機能させる方法はありますか?pkg-configの出力をPython 文字列として取得し、それを の要素として追加して、手動でシェル展開を行う必要がありmodule.extra_compile_argsますか?

4

1 に答える 1

2
module.extra_compile_args = [
  subprocess.check_output(["pkg-config", "--cflags", "gtk+-3.0"]),
  subprocess.check_output(["pkg-config", "--libs", "gtk+-3.0"])
];

http://docs.python.org/library/subprocess.html#subprocess.check_output

于 2012-08-08T19:55:21.747 に答える