将pg_config与waf一起使用

时间:2015-10-01 11:43:25

标签: c postgresql build waf

我使用waf作为我的构建系统,我想使用Postgres编译一个小的C程序。我已将postgres.h包含在我的程序中,因此我需要在wscript文件中找到它的路径。我知道我可以通过运行获得我需要的路径:

pg_config --includedir-server

给了我:

/usr/include/postgresql/9.3/server

所以我想我可以使用这样的东西:

cfg.check_cfg(
    path='pg_config',
    package='',
    uselib_store='PG',
    args='--includedir-server',
)

然后通过以下方式构建我的程序:

bld.program(
    source=['testpg.c'],
    target='testpg',
    includes=['.', '../src'],
    use=['PQ', 'PG'],
)

但是postgres.h: No such file or directory失败了。我运行./waf -v并确认正确的-I标记未传递给gcc。我猜这是因为pg_config没有在它返回的路径中添加-I前缀。有没有办法让waf添加前缀,或者让pg_config添加前缀?

1 个答案:

答案 0 :(得分:1)

如果pg_config具有$obj = new ABC; $url = "http://www.anrdoezrs.net/asd/?ak=123"; $someurl = $obj->getWebPage($url); 类似程序的标准输出(即输出pkg_config之类的东西),那么你的代码就行了,-Ixxx -Iyyy解析了这种输出。

由于没有复杂的解析,您可以选择:

check_cfg

然后使用它:

import subprocess

includes = subprocess.check_output(["pg_config", "--includedir-server"])
includes.replace("\n", "")

conf.env.INCLUDES_PG = [includes]

请参阅library integration in the waf book。它解释了使其有效的命名规则。

您可以编写一个小插件来简化使用:)