如何在Qt Creator中包含仅提升标头库
How to include boost header only library in Qt Creator
我正在尝试使用Qt Creator项目包含一个仅提升标头库,特别是<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
本身就是一个目录,而不是可以包含的文件。
如果你想要variant
标头的 Boost 版本,我认为您希望在 .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
是您的主目录。
这将使您能够拉入<boost/variant.hpp>
,而不会在/usr/include
其他地方发生潜在冲突
- Qt Quick-如何仅从c++代码与qml属性交互
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- Qt:"Q3DScatter"即使包含在内也无法识别
- 如果 x.h 仅由函数声明组成,为什么有必要在 x 中包含 x.h.cpp
- C++,Qt:仅在双击后编辑qtablewidget项目
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 给定一个源文件,有没有办法要求 gcc 返回仅直接包含的头文件的列表?
- QT C++删除带有 *(名称包含)的文件
- 包含仅移动类型的类的构造函数应通过引用还是通过右值引用接收仅移动类型?
- 未找到"png.h"文件,当包含在Qt小部件项目中时
- 如何在Qt Creator中包含仅提升标头库
- 如果外部"C"包含与Qt库发生冲突怎么办?
- 创建包含仅标头库的生成文件
- 如何将Winpcap包含到Qt创建者中
- 不赞成包含include/Qt中的头文件
- 在另一个QT项目中包含一个QT库
- 如何包含与QT具有依赖关系的库