我使用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
添加前缀?
答案 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。它解释了使其有效的命名规则。
您可以编写一个小插件来简化使用:)