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

Import 如何在Vala中导入其他文件?,import,vala,Import,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

这个问题几乎说明了一切——我如何才能将
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);
}
#包括
void c函数(常量字符*s)
{
puts(“这是C代码”);
printf(“%s\n”,s);
}
编译时使用:
valac class.vala main.vala text.c

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