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

一、准备工作

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(避免采坑教程)_环境变量

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

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

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

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

(2)配置编译器

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

(3)编译生成 dll 文件

打开命令行工具,进入 build 目录,输入 ​ ​mingw32-make​ ​​ 命令
一、编译QJson(避免采坑教程)_环境变量_08
再输入 ​​ ​mingw32-make install​ ​​ 命令
一、编译QJson(避免采坑教程)_环境变量_09
即编译完成,生成的 dll 和 头文件默认在 ​​ ​C:\Program Files (x86)\qjson​ ​​ 文件夹下:
一、编译QJson(避免采坑教程)_json_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 模式下均可正常编译运行!