3

私のアプリケーションはこの時点で完全にCで書かれていますが、さまざまなCファイルで使用するためにValaにオブジェクトを追加し始めたいと思います。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
4

1 に答える 1

3

http://www.gnu.org/software/automake/manual/automake.html#Built-Sources-Exampleを参照してください。

最も簡単な修正は、test.hBUILT_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_SOURCES別の方法は、の依存関係に追加することですsrc/main.$(OBJEXT)

于 2012-08-22T18:33:29.690 に答える