Anvil -- An Assistant For You CMake
0x00
前段时间专门抽空做了一个小工具,也就是这里要讲的主题:anvil
一开始做 anvil 的动力很简单:某次尝试体验一下 Linux SignalFD 功能时想直接使用 ezio 的 EventLoop
作为基础事件循环,同时项目使用 cmake 管理。
为了省事,我直接从 ezio 的项目里抠出来 CMakeLists.txt
和几个自己写的 .cmake
文件,就地修改。
但事实证明哪怕这样,改动量也不小,原因大体是因为:cmake 里(非函数内定义的)变量作用域是全局的,通过 fetch-content 功能引入的依赖在 add_subdirectory()
后的模块里也能看到上一层定义的变量,因此为了防止一些控制型变量发生冲突,我都在前面加上了对应的模块前缀。
所以我面对的就是一大坨变量名的更换,以及少部分声明/属性的调整。
考虑到大部分的文件内容都是可以模板化的,而手动“实例化”不仅费事还很容易出错,所以我就很自然地萌生了写一个工具自动化这个过程的想法。
0x01
在经过一两天的短暂思考后,我大致确定了这个工具的定位和需要实现的基本目标,总结起来有三个核心点:
- 辅助 cmake 而不是试图替代它或深度封装
- 内建一个轻量型的依赖管理功能
- 配置化的生成 & 构建流程
首先,第一点是重中之重。