十、Gtk4-Build system

本文介绍了如何管理和组织C语言项目的源文件,强调了将大文件拆分为多个部分的重要性,并讨论了使用Meson和Ninja、Make以及Rake等构建工具进行编译和构建流程的管理。通过示例展示了如何创建头文件、分割源代码以及使用不同构建系统自动化编译过程。

1 管理多个源文件

到目前为止,我们已经编译了一个小型编辑器。但一些不好的迹象已经开始出现。

  • 我们只有一个C源文件,并将所有内容都放在其中。我们需要解决这个问题。
  • 有两个编译器,gcc和glib-compile-resources。我们应该通过一种构建工具来控制它们。

这些思想对于管理大型源文件很有用。

2 将C源文件分成两部分

当你把C源文件分成几个部分时,每个文件应该包含一个东西。例如,我们的源代码有两件事,TfeTextView的定义和与GtkApplication和GtkApplicationWindow相关的函数。将它们分成两个文件,tfetextview.c和tfe.c是一个好主意。

  • tfetextview.c包含了TfeTextView的定义和函数。
  • tfe.c包含main、app_activate、app_open等函数,它们与GtkApplication和GtkApplicationWindow相关

现在我们有三个源文件:tfetextview.c、tfe.c和tfe3.ui。tfe3的3就像一个版本号。通过文件名管理版本是一种可能的想法,但它可能会带来麻烦。您需要在每个版本中重写文件名,它会影响引用文件名的源文件的内容。因此,我们应该从文件名中去掉3。

在tfe.c中调用函数tfe_text_view_new来创建一个TfeTextView实例。但是它是在tfetextview.c中定义的,而不是tfe.c。没有tfe_text_view_new的声明(而不是定义)会在编译tfe.c时出错。该声明在tfe.c中是必要的。这些公开信息通常写在头文件中。它有.h后缀,像tfetextview.h,头文件包含在C源文件中。例如,tfetextview.h包含在tfe.c中。

下面列出了所有的源文件。

/* filename: tfetextview.h */
 1 #include <gtk/gtk.h>
 2 
 3 #define TFE_TYPE_TEXT_VIEW tfe_text_view_get_type ()
 4 G_DECLARE_FINAL_TYPE (TfeTextView, tfe_text_view, TFE, TEXT_VIEW, GtkTextView)
 5 
 6 void
 7 tfe_text_view_set_file (TfeTextView *tv, GFile *f);
 8 
 9 GFile *
10 tfe_text_view_get_file (TfeTextView *tv);
11 
12 GtkWidget *
13 tfe_text_view_new (void);
14 
/* filename: tfetextview.c */
 1 #include <gtk/gtk.h>
 2 #include "tfetextview.h"
 3 
 4 struct _TfeTextView
 5 {
   
   
 6   GtkTextView parent;
 7   GFile *file;
 8 };
 9 
10 G_DEFINE_TYPE (TfeTextView, tfe_text_view, GTK_TYPE_TEXT_VIEW);
11 
12 static void
13 tfe_text_view_init (TfeTextView *tv) {
   
   
14 }
15 
16 static void
17 tfe_text_view_class_init (TfeTextViewClass *class) {
   
   
18 }
19 
20 void
21 tfe_text_view_set_file (TfeTextView *tv, GFile *f) {
   
   
22   tv -> file = f;
23 }
24 
25 GFile *
26 tfe_text_view_get_file (TfeTextView *tv) {
   
   
27   return tv -> file;
28 }
29 
30 GtkWidget *
31 tfe_text_view_new (void) {
   
   
32   return GTK_WIDGET (g_object_new (TFE_TYPE_TEXT_VIEW, NULL));
33 }
34 
/* filename: tfe.c */
 1 #include <gtk/gtk.h>
 2 #include "tfetextview.h"
 3 
 4 static void
 5 app_activate (GApplication *app) {
   
   
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值