这个问题几乎说明了 - 如何将file2.vala
导入file1.vala
?
答案 0 :(得分:8)
你不直接这样做。如果你运行valac file1.vala file2.vala
,就好像你在一个大文件中编译它们一样。
如果要使它们可重用,那么您可能需要共享库。在这种情况下,您编译一个以生成C头文件和VAPI定义:
valac --vapi file1.vapi -H file1.h --library libfile1.so file1.vala
第二个可以使用它:
valac --pkg file1 file2.vala
这假设已安装VAPI文件。如果不是这种情况,您需要传递--vapidir
和file1.vapi
存在的位置,可能是.
。同样,您需要再次通知C编译器file1.h
与-X -I/directory/containing
的位置,可能-X -I.
。最后,您需要通过libfile1.so
告诉C链接器-X -L/directory/containing -X -lfile1
的位置。这是一个特定的平台,您可以使用AutoMake平滑差异,尽管这涉及更多。 Ragel是如何在Vala中使用AutoMake的常用项目。
答案 1 :(得分:5)
只是提供apmasell:
您可以使用类和公共变量来使用多个文件:
main.vala:
extern void cfunction(string text);
void main ()
{
first f = new first ();
f.say_something(f.mytext);
cfunction("c text\n");
}
class.vala:
public class first {
public string mytext = "yolo\n";
public first ()
{
stdout.printf("text from constructer in first\n");
}
public void say_something(string text)
{
stdout.printf("%s\n", text);
}
}
的text.c:
#include <stdio.h>
void cfunction(const char *s)
{
puts("This is C code");
printf("%s\n", s);
}
编译:{{1}}
如您所见,您甚至可以使用C代码