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

Posted

技术标签:

【中文标题】如何在 Vala 中导入其他文件?【英文标题】:How can I import other files in Vala? 【发布时间】:2013-12-25 19:35:31 【问题描述】:

这个问题几乎说明了一切——我如何将file2.vala 导入到file1.vala

【问题讨论】:

【参考方案1】:

你不直接做。如果你运行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 文件已安装。如果不是这种情况,您需要传递--vapidirfile1.vapi 所在的位置,可能是.。同样,您需要通知 C 编译器 file1.h-X -I/directory/containing 的位置,同样,可能是 -X -I.。最后,您需要通过-X -L/directory/containing -X -lfile1 告诉C 链接器libfile1.so 在哪里。这是一个小平台特定的,您可以使用 AutoMake 消除差异,尽管这涉及更多。 Ragel 是如何将 AutoMake 与 Vala 一起使用的常用项目。

【讨论】:

【参考方案2】:

只是为了供应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 代码

【讨论】:

以上是关于如何在 Vala 中导入其他文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 组件中导入外部函数?

如何在Delphi中导入wsdl文件离线?

Symfony 2 如何从另一个包中导入 LESS 文件

如何使用来自其他命名空间的对象以及如何在 PHP 中导入命名空间

如何在 Typescript 文件中导入 Svelte 组件?

如何在 vanilla Javascript 文件中导入 nodejs 模块