我在Python中有一个需要GTK的扩展模块。编译GTK程序通常需要TON的链接,因为GTK依赖于许多其他库(Glib,Cairo,Pango等)。所以,通常我只是使用shell扩展(back-ticks)使用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`
但由于某种原因,当我在distutils中传递给module.extra_compile_args
的参数中使用shell扩展时,我收到一个错误,因为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
那么,有没有办法让这项工作?我是否需要手动执行shell扩展,方法是将pkg-config
的输出作为Python字符串,然后将其添加为module.extra_compile_args
中的元素?
答案 0 :(得分: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