如何在Qt Creator中包括仅Boost Header库

时间:2019-05-04 20:37:19

标签: c++ qt-creator

我正在尝试使用Qt Creator项目添加仅Boost Header库,特别是<boost/variant>

这是我添加到.pro文件中的内容:

INCLUDEPATH += /usr/include/boost \

现在,如果我进入.cpp文件并尝试包含。.

#include <variant.hpp>

可以,但是

#include <boost/variant.hpp>

没有。

这很有意义,因为我要添加/usr/include/boost/,而不是/usr/include。 但是,如果我改为这样做

INCLUDEPATH += /usr/include

我收到大量与cmath相关的错误,这似乎与将/usr/include添加到包含路径-https://github.com/android-ndk/ndk/issues/452

有关

如果我只是在代码中执行#include <variant.hpp>,则提升代码会抱怨-'boost/variant/variant.hpp' file not found

如何正确地允许<boost/variant.hpp>样式的导入工作而没有包括整个/usr/include/

最小示例代码:

# Example.pro
QT += quick
CONFIG += c++17

SOURCES += \
        main.cpp

RESOURCES += qml.qrc

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
// main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>

#include <boost/variant.hpp>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

qml.qrc

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>main.qml</file>
    </qresource>
</RCC>
// main.qml
import QtQuick 2.12
import QtQuick.Controls 2.5

ApplicationWindow {
}

谢谢。

1 个答案:

答案 0 :(得分:1)

此声明:

#include <variant>

正在拉入std C ++头文件以获取变体,并允许您的代码访问std::variant,而不是Boost版本。

此声明:

#include <boost/variant>

可能不会编译-因为/usr/include/boost/variant本身是目录,而不是可以包含的文件。

如果您想要variant标头的Boost版本,我想在.cpp文件中需要它:

#include <boost/variant.hpp>

假设INCLUDEPATH文件夹存在,您不必弄乱/usr/include/boost

更新 假设/ usr / include是冲突的头文件的来源,那么您可以尝试做一个符号链接,以从其他文件夹进行增强。

cd                              # cd to home directory
mkdir include                   # create a local "include" folder
cd include                      # cd to this folder
ln -s /usr/include/boost boost  # create a symlink to boost

然后更新您的包含路径以指向该目录

INCLUDEPATH += /home/yourname/include

/home/yourname是您的主目录。

这将允许您插入<boost/variant.hpp>,而不会在/usr/include的其他地方出现冲突