网上的教程五花八门,挨个试了一遍,总是会报各种错,自己一步步摸索,先将流程梳理如下:

一、准备工作

1、下载 CMake 工具

下载 CMake 工具,在安装界面,选择添加环境变量即可,其他无特别注意事项。

2、添加QT、和MINGW32编译工具的环境变量

本人的环境变量如下:

  • F:\Qt\Qt5.9.0\5.9\mingw53_32\bin:这一个不设置,会报出找不到 QT5 的错误
  • F:\Qt\Qt5.9.0\Tools\mingw530_32\bin:这一个是需要使用 MINGW32 编译工具

二、编译

因为纯命令行编译,测试一直在报错,所以这里我采用命令行+手工界面操作的组合方式。

1、在 qjson 文件夹下新建一个 build 文件夹

一、编译QJson(避免采坑教程)_json

2、打开 cmake 程序,配置编译器,编译dll

其实实现的功能就是命令行:​​cmake -G "MinGW Makefiles" ..​​,不过因为我使用该命令,总是报错,所以这里我采用界面方式配置编译器(PS:现在不报错了,就是因为环境变量没设置才导致的报错,下面 GUI 方式就当了解):

(1)以管理员身份打开 cmake 软件,配置源码路径和构建路径

一、编译QJson(避免采坑教程)_环境变量_02

(2)配置编译器

一、编译QJson(避免采坑教程)_编译器_03一、编译QJson(避免采坑教程)_环境变量_04
一、编译QJson(避免采坑教程)_json_05
一、编译QJson(避免采坑教程)_json_06此时 build 文件夹如下:
一、编译QJson(避免采坑教程)_环境变量_07

(3)编译生成 dll 文件

打开命令行工具,进入 build 目录,输入 ​​mingw32-make​​​ 命令
一、编译QJson(避免采坑教程)_json_08
再输入 ​​​mingw32-make install​​​ 命令
一、编译QJson(避免采坑教程)_环境变量_09
即编译完成,生成的 dll 和 头文件默认在 ​​​C:\Program Files (x86)\qjson​​​ 文件夹下:
一、编译QJson(避免采坑教程)_编译器_10
把 include 文件夹下的头文件和 dll 文件拿到项目中使用即可!

注意:生成的库文件名绝对不能改,一改就会报错!

三、使用

因为 qjson 是用 mingw32 编译器编译生成的库,所以只能项目只能在该编译器下正常运行!

(一)添加依赖

在项目下新建 include 文件夹下,将 dll头文件 复制到该文件夹下:
一、编译QJson(避免采坑教程)_环境变量_11在配置文件夹下添加:

#头文件目录
INCLUDEPATH += $$PWD/include
#设置添加的库文件
LIBS += -L$$PWD/include/ -llibqjson-qt5

(二)使用案例

void Widget::testJson()
{
QJson::Parser parser;
bool ok;
QString json("{"
"\"encoding\" : \"UTF-8\","
"\"plug-ins\" : ["
"\"python\","
"\"c++\","
"\"ruby\""
"],"
"\"indent\" : { \"length\" : 3, \"use_space\" : true }"
"}");
QVariantMap result = parser.parse(json.toUtf8(), &ok).toMap();
if (!ok) {
qFatal("An error occurred during parsing");
exit (1);
}
qDebug() << "encoding:" << result["encoding"].toString();
qDebug() << "plugins:";
foreach (QVariant plugin, result["plug-ins"].toList()) {
qDebug() << "\t-" << plugin.toString();
}
QVariantMap nestedMap = result["indent"].toMap();
qDebug() << "length:" << nestedMap["length"].toInt();
qDebug() << "use_space:" << nestedMap["use_space"].toBool();
}

编译无问题后,将 ​​libqjson-qt5.dll​​​ 和 ​​libqjson-qt5.dll.a​​ 复制到编译后的目录,运行即可!

在 debug 和 release 模式下均可正常编译运行!