Я предлагаю вам сделать следующее (здесь в качестве примера я использую проект Hello World):
Заголовочный файл (components.h)
#include <gtk/gtk.h>
// declarations
extern GtkWidget *label_hello;
extern void on_btn_hello_clicked();
extern void on_window_main_destroy();
C файл (компоненты. c)
#include "components.h"
// definition
GtkWidget *label_hello;
void on_btn_hello_clicked()
{
...
gtk_label_set_text(GTK_LABEL(label_hello), "Hello, world!");
...
}
void on_window_main_destroy()
{
gtk_main_quit();
}
Основной файл (основной. c)
#include "components.h"
int main(int argc, char *argv[])
{
...
GtkBuilder *builder;
builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "glade/window_main.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
...
label_hello = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_hello"));
...
}
Примечание : Построитель может быть инициализирован в функции файла. c, а затем указатель может передаваться по различным функциям вашего кода. Это в значительной степени зависит от того, как вы хотите построить свой код. В приведенном выше примере компоновщик находится в основном файле. c, но его можно легко переместить в файл компонентов. c. Например, вы можете сделать что-то вроде:
GtkBuilder *get_builder_instance(){
GtkBuilder * builder = malloc(sizeof(GtkBuilder));
builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "glade/window_main.glade", NULL);
return builder;
}