簡體   English   中英

如何在Qt Creator中包括僅Boost Header庫

[英]How to include boost header only library in Qt Creator

我正在嘗試使用Qt Creator項目包括僅Boost標頭的庫,特別是<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 {
}

謝謝。

這個說法:

#include <variant>

正在拉入std C ++頭文件中的variant,並允許您的代碼訪問std :: variant ,而不是Boost版本。

這個說法:

#include <boost/variant>

可能不會編譯-因為/usr/include/boost/variant本身是目錄,而不是可以包含的文件。

如果您想使用Booster版本的variant標頭,我想您可以在.cpp文件中使用:

#include <boost/variant.hpp>

而且,假設/usr/include/boost文件夾存在,則不必弄亂INCLUDEPATH

更新假設/ 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您的/home/yourname是您的主目錄。

這樣一來,您可以<boost/variant.hpp>而不會在/usr/include其他位置產生潛在沖突

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM