我的应用程序此时完全用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
答案 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_SOURCES
和src/main.$(OBJEXT)
的依赖项。