【发布时间】:2013-12-25 19:35:31
【问题描述】:
这个问题几乎说明了一切——我如何将file2.vala 导入到file1.vala?
【问题讨论】:
这个问题几乎说明了一切——我如何将file2.vala 导入到file1.vala?
【问题讨论】:
你不直接做。如果你运行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.。最后,您需要通过-X -L/directory/containing -X -lfile1 告诉C 链接器libfile1.so 在哪里。这是一个小平台特定的,您可以使用 AutoMake 消除差异,尽管这涉及更多。 Ragel 是如何将 AutoMake 与 Vala 一起使用的常用项目。
【讨论】:
只是为了供应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);
}
}
文本.c:
#include <stdio.h>
void cfunction(const char *s)
{
puts("This is C code");
printf("%s\n", s);
}
编译为:valac class.vala main.vala text.c
如您所见,您甚至可以使用 C 代码
【讨论】: