如何在 Qt Creator 中仅包含 boost header 库
How to include boost header only library in Qt Creator
我正在尝试使用 Qt Creator 项目包含一个仅限 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
.
如何在不包含整个 /usr/include/
的情况下正确地允许 <boost/variant.hpp>
样式导入工作?
最小示例代码:
# 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>
正在为变体引入标准 C++ header 文件,并让您的代码访问 std::variant,而不是 Boost 版本。
这条语句:
#include <boost/variant>
可能无法编译 - 因为 /usr/include/boost/variant
本身就是目录,而不是可以包含的文件。
如果您想要 variant
header 的 Boost 版本,我想您需要在您的 .cpp 文件中:
#include <boost/variant.hpp>
假设 /usr/include/boost
文件夹存在,您就不必弄乱 INCLUDEPATH
。
更新
假设 /usr/include 是冲突 header 文件的来源,您可以尝试做一个符号链接以从不同的文件夹提升。
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
中的其他地方而不会发生潜在冲突
我正在尝试使用 Qt Creator 项目包含一个仅限 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
.
如何在不包含整个 /usr/include/
的情况下正确地允许 <boost/variant.hpp>
样式导入工作?
最小示例代码:
# 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>
正在为变体引入标准 C++ header 文件,并让您的代码访问 std::variant,而不是 Boost 版本。
这条语句:
#include <boost/variant>
可能无法编译 - 因为 /usr/include/boost/variant
本身就是目录,而不是可以包含的文件。
如果您想要 variant
header 的 Boost 版本,我想您需要在您的 .cpp 文件中:
#include <boost/variant.hpp>
假设 /usr/include/boost
文件夹存在,您就不必弄乱 INCLUDEPATH
。
更新 假设 /usr/include 是冲突 header 文件的来源,您可以尝试做一个符号链接以从不同的文件夹提升。
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