0

我想使用带有 waf 构建系统的 vala 库(我编写的)编译一个 vala 应用程序。

我实际上可以使用以下命令编译它:

valac -X -I/usr/local/include/ofde-1.0/ -X -lofde -o ofde-terminal src/* /usr/local/share/vala/vapi/ofde.vapi --pkg gtk+-3.0 --pkg vte-2.90 -X -DGETTEXT_PACKAGE='"ofde-terminal"'

但是,我无法使用以下 wscript 编译它:

#! /usr/bin/env python

APPNAME = 'Terminal'
PROG_NAME = 'ofde-terminal'
VERSION = '0.1'

top = '.'
out = 'build'

def options(opt):
    opt.load('compiler_c')

def configure(conf):
    conf.load('compiler_c vala')

    conf.check_cc(lib='ofde', uselib_store='ofde')

    conf.check_cfg(package='gtk+-3.0', uselib_store='gtk+', atleast_version='3.0', args='--cflags --libs')
    conf.check_cfg(package='vte-2.90', uselib_store='vte', atleast_version='0.30', args='--cflags --libs')

    conf.define('PACKAGE', APPNAME)
    conf.define('VERSION', VERSION)

def build(bld):
    bld(
        cflags = ['-DGETTEXT_PACKAGE=\'"ofde-terminal"\''],
        features='c cprogram',
        packages = ['gtk+-3.0', 'vte-2.90'],
        source = bld.path.ant_glob('src/*.vala'),
        target = PROG_NAME,
        uselib = ['gtk+', 'ofde', 'vte'],
    )

我从 waf -v 收到以下错误:

Waf: Entering directory `/path/to/build'
[1/5] valac: src/MainMenu.vala src/MainWindow.vala src/main.vala -> build/src/MainMenu.c build/src/MainWindow.c build/src/main.c
17:18:52 runner ['/usr/bin/valac', '-C', '--quiet', '--profile=gobject', '--pkg=gtk+-3.0', '--pkg=vte-2.90', '/path/to/src/MainMenu.vala', '/path/to/src/MainWindow.vala', '/path/to/src/main.vala']
/path/to/src/MainWindow.vala:40.13-40.16: error: The type name `Tabs' could not be found
Waf: Leaving directory `/path/to/build'
Build failed
 -> task in 'ofde-terminal' failed (exit status 1): 
        {task 27259408: valac MainMenu.vala,MainWindow.vala,main.vala -> MainMenu.c,MainWindow.c,main.c}
''

我的库包含类选项卡。

我认为问题在于 waf 没有找到 ofde.vapi 文件。

有没有办法告诉它在哪里可以找到该文件?

谢谢你的帮助。

4

1 回答 1

3

WAF 使用pkg-config文件来确定库依赖关系。pkg-config 文件的名称与 vapi 文件的名称相同。因此,我建议您创建一个 pkg-config 文件 ofde.pc,它可能如下所示(根据需要调整路径、版本和要求):

prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include
datarootdir=/usr/share
datadir=/usr/share

Name: ofde
Version: 1.0
Requires: gtk+-3.0
Libs: -L${libdir} -lofde
Cflags: -I${includedir}/ofde

该文件需要位于 /usr/lib/pkgconfig 中,然后可以通过以下配置步骤使用 waf 进行配置:

conf.check_cfg(package='ofde', uselib_store='ofde', atleast_version='1.0', args='--cflags --libs')
...
packages = ['gtk+-3.0', 'vte-2.90', 'ofde'],
于 2012-02-19T20:34:46.293 回答