PS:最近在使用我们的mingw qt 工程中使用 boost 的时候,需要用到一些boost 中的工具类,该类是需要通过编译,然后链接到qt中的。网上看了很多教程,有很多千篇一律的,特此提醒,能下载到的现成的不一定是能用的,倒头来还要自己摸索一遍,从头编译。
移植步骤:
1. 下载boost 。
网站链接:https://www.boost.org/users/download/ 我下载的版本为1.66版本,下载完成之后,解压缩。
2. 打开mingw ,最好是就用qt 自带的,我这里打开的是Qt5.12.6(MinGW 7.3.0 32-bit.如下图;
3. 在命令行cd 到 boost_1_66_0/tools/build/src/engine
4. 执行 build.bat gcc,在当前目录将会生成bin.ntx86文件夹,里面包含两个exe文件b2.exe,bjam.exe
5. 将bin.ntx86\bjam.exe拷贝到 boost_1_66_0(该目录根据自己的情况修改) 覆盖原来的文件
6. cd 到 boost_1_66_0 目录下
7. 执行命令 bjam "toolset=gcc" install,执行命令会在C盘根目录下生成一个Boost文件夹。最终经过漫长的编译会在该文件生成如下的头文件与lib。
8. 将 7 中生成的 Boost 里的 boost文件夹拷贝到你需要的地方,(可以是qt 的include下面例如F:\Qt592\5.9.2\mingw53_32\include)
9. 将7 中生成的 Boost 里的 lib下.a文件拷贝到你需要的地方,(例如 qt lib目录下 F:\Qt592\5.9.2\mingw53_32\lib)
我是分别将7中的boost 文件夹和lib文件夹拷贝到我要用工程的外层文件夹如下图的1和2。
10. 使用。 在你需要用boost的库的xxx.pro中添加 include 和lib (如果你把头文件放在了qt 的目录下面,就只需要添加lib连接库了。)
我的pro 链接如下
11. 下面是我的测试程序:
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//mianwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
string filePath = "/work/test/testPath";
string fileName = "test_path.txt";
//path("/work/test/testPath/test_path.txt");
boost::filesystem::path testFilePath(filePath);
// 使用'/'追加路径,并把路径转化成字符串
string fullFilePath = (testFilePath/fileName).string();
cout << "fullFilePath:" << fullFilePath << endl;
}
MainWindow::~MainWindow()
{
delete ui;
}
//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
12. 执行结果: