如何使用C语言中的Vala对象/方法?

时间:2012-08-22 18:08:52

标签: c vala

我的应用程序此时完全用C编写,但我想开始在Vala中添加对象以用于各种C文件。我知道我可以使用valac生成.c / .h文件并包含这些文件,但最好将它们作为源文件包含在我的automake设置中。

另一方面,这是微不足道的,只需为任何.c / .h文件写一个vapi文件,并将其添加为--pkg。不幸的是,对于我想要使用的方式来说似乎并不是那么微不足道。

我所做的相关补充。

configure.ac:

AM_PROG_VALAC([0.12.0])

dnl Only adding these to test the package include in vala
OFS_PACKAGES="--pkg gee-1.0"
AC_SUBST(OFS_PACKAGES)

Makefile.am:

VALAFLAGS = \
    @OFS_PACKAGES@

src_ofs_SOURCES = \
    src/main.c \
    src/test.vala

的src / main.c中

#include "test.h"

...

FooTest *object = foo_test_new ();

的src / test.vala:

using Gee;

namespace Foo {

    public class Test : Object {

        public Test () {
            stdout.printf ("Test construction\n");
        }
    }
}

当我运行make时出现错误

src/main.c:10:18: fatal error: test.h: No such file or directory

这并不奇怪,因为对valac的调用没有发生在gcc之前。所以问题是,是否有办法告诉automake / make让valac先运行以生成所需的文件?

UPD:

使用以下更改管理以使其工作:

Makefile.am:

VALAFLAGS = \
    -H ofs.h -C -c
    @OFS_PACKAGES@

src_ofs_SOURCES = \
    src/test.vala \
    src/main.c

1 个答案:

答案 0 :(得分:3)

请参阅http://www.gnu.org/software/automake/manual/automake.html#Built-Sources-Example

最简单的解决方法是将test.h添加到BUILT_SOURCES:

BUILT_SOURCES += src/test.h
CLEANFILES += $(BUILT_SOURCES)

您可以通过将vala文件放在自己的变量中来扩展它:

src_ofs_VALASOURCES = $(filter %.valam,$(src_ofs_SOURCES))
BUILT_SOURCES += $(src_ofs_VALASOURCES:.vala=.h)

另一种方法是将其添加到nodist_ofs_SOURCESsrc/main.$(OBJEXT)的依赖项。