将英文年、月、日、时进行八字排盘。例如:输入 1990-10-10 7时
将输出:“庚午 丙戌 戊申 丙辰”
- libiconv - 字符集转换,此库必须要有
下方两个库只在要求编译测试目标的时候才需要
-
sqlite3 - 从sqlite3数据库中查询农历日期,测试目标才需要,因为测试用例会读取 calendar.db 来获取对照数据
-
googletest - 如果你要编译测试目标的话,那么测试框架库肯定不能少
因为已经添加了 vcpkg 作为项目的子模块作为包管理器,并且在项目的根目录下的 vcpkg.json 文件中已经说明了依赖库,所以最简单的办法就是直接添加 CMAKE_TOOLCHAIN_FILE 指向子模块中的 vcpkg.cmake 来下载、安装和编译。
- 先将项目克隆到本地,同时也初始化子模块
git clone https:/mattxlee/eightwords && cd eightwords && git submodule update --init
- 使用 vcpkg 来作为包管理器,让 cmake 脚本开始配置并准备当前平台的编译文件
-
下方命令会在当前的项目根目录下建立名为 build 的目录,所有编译输出的文件都将存在这个目录下
-
若不想编译测试目标,可以把
-DBUILD_TEST=1
删除
cmake . -B build -DCMAKE_TOOLCHAIN_FILE=`pwd`/vcpkg/scripts/buildsystems/vcpkg.cmake -DBUILD_TEST=1
- 执行下方的命令开始编译,注意调整
-j7
防止 CPU 过热🙈
cmake --build build -j7
注:若要编译非优化且带调试信息的版本,请在配置时添加 -DCMAKE_BUILD_TYPE=Debug
-
所有的与库相关的符号说明都在命名空间
l4w
里 -
八字排盘的转换对象请查看 include/eightwords.h,其实只有一个方法:
Table8x2::analyze
-
本库并不提供农历转换工具,但是提供了一个数据库,这个数据库中有一段时间(将近十年)的阳历和农历的对照表,保存在 data/calendar.db,是 sqlite3 格式
-
具体的细节请参考 test/test.cpp
注:这个排盘的算法是曾经的我的一个朋友教的,但是现在的我已经完全忘记了🫠。不过我想在代码输出正确的情况下你们应该不会介意这件事情🙂,毕竟这个世界不存在过不去的坎,也不存在忘不掉的事。现在的我,也就只能对代码做一些修补和优化,稍微的保证一下它的合理性和鲁棒性,完结撒花👏🎉🎉。
再注:其实本来想把中文日历转换加上的,但是后来想想这个功能和八字排盘其实没太大关系,所以删除掉了,但是留了一个古老的数据库来作为排盘程序的结果验证👏。