---
title: 使用Makru和makru_langc管理现代C项目编译：引入&目录
date: 2020-12-26 21:21:13
updated: 2021-1-5 10:35
tags:
  - Makru
  - C
  - 系列文章
categories: 代码农场
---

[Makru](https://gitlab.com/jinwa/makru)是一个用Python编写的全新编译工具。它的目的不是提供更多的编译逻辑，而是提供一个统一的平台方便开发和引入新的编译逻辑。Makru和目前主流的make-like编译系统最大的不同点再于：它没有使用类似宏语法之类的东西为配置文件提供超高的灵活性，而是直接选择了很多现代包管理工具正在使用的结构化数据配置文件（Makru使用的是yaml）。[makru_langc](https://gitlab.com/jinwa/makru_langc)就是在它之上构建的C语言项目编译插件。
得益于这样的选择，makru_langc提供了非常流畅的编译管理体验。你可以快速理解并编辑配置文件，而不是在配置文件的海洋里晕头转向。另外，makru_langc还支持高自由度的自定义，你甚至可以利用它提供的工具编写自己的编译逻辑。

这个文章系列将会介绍一个用makru_langc来管理编译的小演示项目scat，它接收标准输入然后输出到标准输出。为了演示makru_langc的功能，scat会有一个子项目叫libcopy。这个子项目里只有一个函数：从第一个File输入，输出到第二个File。

<!-- more -->

makru_langc还自带直接从本地pkgconfig查询第三方库的功能，最后一篇文章会覆盖到这个特性，并以此说明如何为makru_langc编写自己的库查询逻辑。

## 环境说明
文章中的开发环境是运行于Linux 5.9.15 x86_64之上的Fedora 33，Python 3.9以及Clang 11.0。Makru的版本是v0.1.0（最新beta版本），makru_langc的版本是尚未发布的r1（你可以直接检出master分支）。

## 目录
- {% post_link "makru-tutor-2" "配置Makru和makru_langc" %}
- 为可执行文件项目编写配置文件
- 为库项目编写配置文件
- 使用Pkgconfig Dependency Resolver引入第三方库
- makru_langc的基本工作流程
- 编写一个基于命令行输入的Dependency Resolver
- makru_langc代码阅读指引
