10个版本

0.1.0-alpha92021年3月11日
0.1.0-alpha82021年2月5日
0.0.0 2021年1月28日

#28 in #makefile

45每月下载次数

MIT/Apache

31KB
692

Epine

Crates.io

Epine是一个强大的Makefile生成器,使用Lua编程语言进行配置。

目标

  • 生成单个Makefile
  • 可扩展和可缩减
  • 允许任何人共享他们的Epine模块和辅助库

非目标

  • 替代 make
  • 替代包管理器

安装

使用Cargo安装Epine的最新版本

cargo install epine

如果您还没有安装Cargo/Rust,您可以从 rustup.rs 获取。

你好,Epine!

进入您选择的文件夹,您希望在那里生成Makefile。

mkdir hello-epine
cd hello-epine

在这个新文件夹中,创建一个名为 Epine.lua 的新文件

return {
    action "hello" {
        echo("hello!");
    };
}

要(重新)生成Makefile,只需运行 epine,无需任何参数。

epine

Epine将运行包含在 Epine.lua 文件中的Lua代码,并根据此文件返回的内容生成Makefile。

hello:
    @echo hello!
.PHONY: hello

使用远程模块

生成的Makefile的描述方式非常接近最终生成的结果。如果只是这样,Epine将只是一个非常讨厌的用Lua编写Makefile的方式...

这就是为什么Epine能够从GitHub仓库下载和加载Lua模块。这使得重用和共享辅助函数和库变得非常容易。目前仅支持GitHub,但我非常希望在未来看到Epine支持更多来源;欢迎贡献!

以下是一个示例,展示了Makefile生成可以多么简单

-- the `tek` module, which was made for students at Epitech, takes care of
-- generating many rules automatically, like "all", "clean", "fclean", etc...
-- it also generates the proper rules to build and run unit tests!
local tek = require "@nasso/epine-tek/v0.1.0-alpha"

-- project metadata (its name, and the targets built by the "all" target)
tek:project "libmy" {"libmy.a", "hello"}

-- a C static library!
tek:static "libmy.a" {
    language = "C";
}

-- a C binary using the library!
tek:binary "hello" {
    language = "C";
    prerequisites = {"libmy.a"};
    srcs = {"main.c"};
    libs = {"my"};
}

-- return the Makefile description to Epine for generation
return tek:make()

这个简单的脚本,只有12行代码,生成了一个干净、可读的、完全功能Makefile!当然,这仅仅是一个Epine能做什么的简单示例。

因为它本质上都是Lua,所以您可以想象任何类型的API来描述您的项目,并且您可以与任何人共享它!

状态

Epine仍然是一个非常年轻的工程项目。我构建它的主要原因是我不想在我作为 Epitech 学生的前几年中,在不同的学校项目之间复制粘贴我的Makefile。

许可证

Epine 采用了 MIT 许可证和 Apache 许可证(版本 2.0)的条款,您可选择其中之一。

请参阅 LICENSE-MIT 和 LICENSE-APACHE-2.0 文件以获取完整文本。

依赖项

~9–23MB
~373K SLoC