3

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

反过来,这很简单,只需为任何 .c/.h 文件编写一个 vapi 文件并将其添加为 --pkg。不幸的是,对于我想要使用的方式来说,它似乎并不那么简单。

尽管如此,我还是做了相关的补充。

配置.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)

生成文件.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 以生成需要包含的文件?

升级版:

使用以下更改设法使其工作:

生成文件.am:

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

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

1 回答 1

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).

于 2012-08-22T18:33:29.690 回答