在 cmake 项目中如何调整 lz4 项目构建生成的地址?

在 cmake 项目中如何调整 lz4 项目构建生成的地址?

文一

2025-03-06 发布22 浏览 · 0 点赞 · 0 收藏

“立业建功,事事要从实地着脚”,让我们记录下这些开发中的点滴智慧,为将来有志于投身工业级数据库内核研发的同志们,提供有益的参考与借鉴!

一般而言,在 cmake 中导入外部项目,就是采取如下的步骤:

  1. 编写 CMakeLists.txt (这便是整个项目的 “总纲”),配套好各个周边项目的 cmake 文件(这就像大的蓝图与小的计划)
  2. 在 cmake 中使用 ExternalProject_Add 函数指定好小配套的信息(实际上就是指定好 git 仓库的有关内容)
  3. 根据项目的情况,加入自定义的指令

lz4 项目如何导入?

在前面的步骤中,与其它的很多项目是没有区别的,参考我们的配置:

image.png

(可以发现,做的事情就是指定了从哪里下载,下载到哪里去)

而主要的问题在于,lz4 项目的 README.md 中指出:


Installation
-------------------------

make
make install     # this command may require root permissions

LZ4's `Makefile` supports standard [Makefile conventions],
including [staged installs], [redirection], or [command redefinition].
It is compatible with parallel builds (`-j#`).

[Makefile conventions]: https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
[staged installs]: https://www.gnu.org/prep/standards/html_node/DESTDIR.html
[redirection]: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
[command redefinition]: https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html

放在实际的开发中就是,如果我们没有注意到这段话,直接导入到 cmake 项目里面时,就会出现如下的情况:

image-1.png

(正好对应到 README.md 中的 “可能需要权限”)

而我们又注意到一件事情,在很多时候,我们的这些配套项目往往只是服务于本项目,而不是服务于整个操作系统(这受到了于雨老师主导的 Kiwi 存储引擎的启发)。

img

(这张图就是一个形象的比喻)

因此,我们需要参考着 https://www.gnu.org/prep/standards/html_node/Directory-Variables.html 中指导的内容,调整 make 以后的输出位置(cmake 某种意义上就是一个下载器和脚本小助手),具体参考:

image-2.png

(实际上就是在 make 的时候加上一点儿东西,要在 cmake 里面做改编)

最后就可以顺利地把内容导出到你想要的地方了。

image-3.png

(导出后的结果,自定义配置生效,感谢 VSCODE 的 vsnetrw 插件,使得 VSCODE Emacs 化了)

写在最后

感谢中国 PostgreSQL 分会的魏波老师与王其达老师,原子开源基金会的张凯老师与李少辉老师,以及研发部的同志们,他们让我们有了建设这个开源专区的机会,以及见证中国国家级开源平台不断改进的机会。

感谢于雨老师,他是一名优秀的开源专家,在分布式领域有着独特的见解。

最后感谢应急管理大学开源实验室的袁国铭主任,他是这一切的开端。

让我们继续学习,不断探索,向着 “团结国内内核研发力量,降低工业级数据库研发门槛” 这个目标而去。

请前往 登录/注册 即可发表您的看法…