Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

在 C++ 中使用 CMake 构建专属于自己的轮子库

1. 前言 掌握一门编程语言的关键之一就是多动手写代码。 当我不知道该写什么代码时,通常会选择造轮子。 造轮子的过程中不仅能让我更加熟悉语言的特性,还能让我深入思考这些轮子的底层实现原理。 同时,造好的轮子也可以用于以后的项目中,从而提高开发效率。 C++ 是一门非常适合造轮子的语言,搭配上 CMake 这个构建工具,可以轻松构建出一个专属于自己的轮子库。 这样在以后的项目中,只需要引入这个库,就可以使用自己造的轮子了。 例如,当我曾经实现了一个线程池,未来如果要使用它, 只需要 include 我的 wheel 库: #include <wheel/thread_pool.hpp> int main() { wheel::ThreadPool thread_pool(4); ... } 本文将会用一个简单的例子来介绍如何使用 C++ 和 CMake 来构建一个专属于自己的轮子库。 2. 例子介绍 本文的目标是实现一个加法器,输入两个整数,加法器会输出它们的和。 这个加法器用到了wheel库中的math.hpp文件里面的add函数。 3. 构建轮子库 首先来看一下最终的 wheel 库目录结构: wheel ├── CMakeLists.txt ├── include │ └── wheel │ └── math.hpp └── src └── math.cpp 约定include/wheel内存的头文件是对外公开的接口,src内存源文件(也可以存私有头文件),test内存的测试文件。 接下来我们分别来看一下这几个文件的内容。 include/wheel/math.hpp定义要暴露的接口: #pragma once namespace wheel { int add(int a, int b); } // namespace wheel 信息 ...

2025-2-21 · 360 words

在 dwm 中防止特定窗口被 swallow 的方法

1. 前言 dwm 是 X11 下的平铺式窗口管理器,它是用 C 语言编写的,非常轻量级,全部代码也才不到 2k 行。 它提供了一些基本的窗口管理功能,对于额外的功能,可以通过修改源码来实现。 目前 suckless 官网 上提供了非常多的补丁,可以用来扩展 dwm 的功能。 其中一个很重要的补丁就是 swallow , 它可以让 dwm 在启动一个新的应用程序时,将其嵌入到一个已有的窗口中,而不是启动一个新的窗口。 这样可以大幅度减少多余窗口的数量。 详细信息可以参考 Luke Smith 的视频 。 2. 需求分析 swallow 固然很好,但是有时候我们并不希望所有的窗口都 swallow 终端窗口, 比如有时候我在开发游戏过程中,我希望可以看到终端窗口的输出来进行 debug ,这时 swallow 补丁就无法满足我的需求了。 我尝试过其他方式,比如使用 dynamicswallow patch , 但是这个 patch 过于重量级,提供了太多不必要的功能。 所以我决定在 swallow patch 的基础上进行修改,实现只有特定窗口才会被 swallow 的功能。 上面演示了noswallow的效果: 通过在执行命令前加上noswallow脚本, 比如noswallow ./your_app,就可以防止your_app被 swallow 。 3. 实现原理 实现过程非常简单: 因为我们需要进行进程间通信(终端和 dwm 之间), 所以我们选择最简单的进程间通信方式:文件。 在 dwm 的dwm.c中的swallow函数开始处,我们添加一个if语句: void swallow(Client *p, Client *c) { if (c->noswallow || c->isterminal) return; if (c->noswallow && !swallowfloating && c->isfloating) return; // add this to your code if (!access("/tmp/noswallow", F_OK)) return; access("/tmp/noswallow", F_OK)会检查/tmp/noswallow是否存在,如果存在则返回 0 ,否则返回-1 。 ...

2025-2-17 · 130 words

使用 Hugo 搭建个人博客网站并自动部署至 GitHub Pages

1. 前言 Hugo 是一个用 Go 语言编写的静态网站生成器, 它可以将 Markdown 文件转换为 HTML 文件,支持主题和插件, 生成的网站可以直接部署到 GitHub Pages 、云服务器等。 本文将介绍如何使用 Hugo 搭建个人博客并使用 GitHub Actions 自动部署到 GitHub Pages 上。 实现的效果是,当我们将博客的 Markdown 文件推送到 GitHub 仓库时, GitHub Actions 会自动构建 Hugo 网站,并将生成的 HTML 文件推送到 GitHub Pages 上, 这样我们就可以通过https://<username>.github.io访问我们的博客。 后面会大致介绍下如何将 Hugo 部署到云服务器上,没有特殊需求不建议折腾。 2. 安装 Hugo 具体安装方法可以参考 Hugo 官方文档 。 以我使用的 Arch Linux 为例,可以通过以下命令安装 Hugo : sudo pacman -S hugo 3. 创建 Hugo 网站 初学者可以参考 Hugo 官方教程 。 由于我使用的是 PaperMod 主题, 如果你也想使用这个主题, 可以参考 PaperMod 安装教程 。 以下我列出使用 git submodule 方法(推荐)创建 PaperMod 主题的 Hugo 网站的命令: ...

2025-2-12 · 991 words
京ICP备2025109231号-1