如何在Vala中导入其他文件?

hkk*_*hkk 7 import vala

这个问题几乎说明了我怎么能导入file2.valafile1.vala

apm*_*ell 8

你不直接这样做.如果你运行valac file1.vala file2.vala,就好像你在一个大文件中编译它们一样.

如果您想让它们可重用,那么您可能需要一个共享库.在这种情况下,您编译一个以生成C头文件和VAPI定义:

valac --vapi file1.vapi -H file1.h --library libfile1.so file1.vala
Run Code Online (Sandbox Code Playgroud)

第二个可以消耗这个:

valac --pkg file1 file2.vala
Run Code Online (Sandbox Code Playgroud)

这假设已安装VAPI文件.如果不是这种情况,您可能需要传递--vapidirfile1.vapi存在的位置..同样,你需要告知所在的C编译器file1.h与生活-X -I/directory/containing再次,大概-X -I..最后,您需要告诉C链接器哪里libfile1.so是via -X -L/directory/containing -X -lfile1.这是一个特定的平台,您可以使用AutoMake平滑差异,尽管这涉及更多.Ragel是如何在Vala中使用AutoMake的常用项目.


use*_*969 5

只是为了提供apmasell:

您可以使用类和公共变量来使用多个文件:

main.vala:

extern void cfunction(string text);

void main ()
{
    first f = new first ();
    f.say_something(f.mytext);
    cfunction("c text\n");
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

的text.c:

#include <stdio.h>

void cfunction(const char *s)
{
    puts("This is C code");
    printf("%s\n", s);
}
Run Code Online (Sandbox Code Playgroud)

编译: valac class.vala main.vala text.c

如您所见,您甚至可以使用C代码