C++通用编程

攒库!攒库!

为啥攒库

最近越来越感觉到攒库的重要性。

之前编写cmake的时候并没有太注意攒库的重要性,导致每次起一个新的工程都花了大量的时间在做基础工程。

实际上这些基础工程都写了好多遍。我的主要做法参考了知乎上面Ubpa老哥的做法。首先,在cmake库里面编写了下载相关的函数,以及快捷添加目标的函数。

具体做法

cmake库也是很有用的库!

在任意的工程下面,可以先对这个cmake库进行拉取:

拉取我自己的cmake库

自己写的库作为子模块

将自己攒的库作为子模块加入cmake中,并且自动添加target。

mathlib是我自己编写的数学库
cmake执行初始化操作

所有第三方库加到自己的专门的repo

而第三方的库我直接做了一个第三方库的repo,用于直接拉取并且使用。

每个库的下面都有自己的cmake模块
以fmt为例

当我要使用的时候我直接调用这个函数即可直接引用这个库

使用opengl时引用glad、glew

通过匹配CMakeLists找到所有的Target

这个技巧可以帮助我们调用一个函数找到所有的Target。但是它的问题在于如果被包含的CMakeLists.txt中也调用了这个函数,就会出现问题。

所以我添加了一个判断,也就是在InitProject的时候会将最先Init的那个Project作为Root,判断当前工程是否为Root。如果为Root则进行AddSubDirectory,否则的话Skip这个操作。

目前已经攒和准备攒的库

个人库:

  • cmake库
  • 数学库
  • Template库(开发中)
  • Common库(开发中)
  • OpenGL库(开发中)
  • DX12库(开发中)

第三方库

  • fmt
  • spdlog
  • glad
  • glew
  • glfw
  • rapidjson
  • tinyxml
  • stb_image
  • lua
  • tinydir
  • imgui

总结

有了攒库的思路之后,之后做很多事情可以事半功倍。

就像之前开发C#一样当时攒了一个ResetCore用来开发自己的玩具。

现在C++的终于可以攒起来了。不像之前这里写一点那里写一点、

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注