2013-12-08 12 views

risposta

8

Non lo fai direttamente. Se esegui valac file1.vala file2.vala, è come se li avessi compilati in un unico grande file.

Se si desidera renderli riutilizzabili, probabilmente si desidera una libreria condivisa. In questo caso, si compila uno per produrre un file di intestazione C e una definizione VAPI:

valac --vapi file1.vapi -H file1.h --library libfile1.so file1.vala 

Il secondo si può quindi consumare questo:

valac --pkg file1 file2.vala 

Questo assume che il file VAPI è stato installato. In caso contrario, sarà necessario passare --vapidir e la posizione in cui esiste file1.vapi, probabilmente .. Allo stesso modo, è necessario informare il compilatore C su dove file1.h vive con -X -I/directory/containing, ancora, probabilmente -X -I.. Infine, dovrai dire al C linker dove libfile1.so è tramite -X -L/directory/containing -X -lfile1. Questa è una piccola piattaforma specifica e puoi correggere la differenza usando AutoMake, anche se questo è un po 'più complicato. Ragel è il solito progetto go-to su come utilizzare AutoMake con Vala.

4

solo per la fornitura di apmasell:

è possibile utilizzare più file utilizzando le classi e le variabili pubbliche:

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); 
} 

compila con: valac class.vala main.vala text.c

come si può vedere, si può anche utilizzare codice C