我正在尝试使用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 {
}
谢谢。
最佳答案
这个说法:
#include <variant>
正在拉入std C++头文件以获取变体,并允许您的代码访问std::variant而不是Boost版本。
这个说法:
#include <boost/variant>
可能不会编译-因为
/usr/include/boost/variant
本身是目录,而不是可以包含的文件。如果您想使用ost的
variant
header ,请在.cpp文件中使用:#include <boost/variant.hpp>
而且,假设
INCLUDEPATH
文件夹存在,您也不必弄乱/usr/include/boost
。更新
假设/ usr / include是冲突的头文件的来源,那么您可以尝试做的事情是做一个符号链接(symbolic link)以从另一个文件夹进行增强。
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
中的其他位置产生潜在冲突