此时我的应用程序完全是用 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