Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从源代码部分构建Qt6_C++_Qt_Qt6 - Fatal编程技术网

C++ 从源代码部分构建Qt6

C++ 从源代码部分构建Qt6,c++,qt,qt6,C++,Qt,Qt6,我需要在Ubuntu18上安装Qt6。因为qt6不在存储库中(或者是吗?),所以我必须从源代码编译它们。但是,我在VDS服务器上执行此操作,它的功能不是很强大(2个内核,4GB的RAM),因此我没有足够的能力进行标准Qt6编译(编译崩溃,出现“我没有足够的RAM”之类的错误)。我想知道是否可以只编译QtHttpServer(Qt6的扩展)所需的模块。 我试图在文档中找到此信息,但什么也找不到。旧的Qt5方法是将-skip传递到configure命令行。e、 g.配置-跳过qtremoteobje

我需要在Ubuntu18上安装Qt6。因为qt6不在存储库中(或者是吗?),所以我必须从源代码编译它们。但是,我在VDS服务器上执行此操作,它的功能不是很强大(2个内核,4GB的RAM),因此我没有足够的能力进行标准Qt6编译(编译崩溃,出现“我没有足够的RAM”之类的错误)。我想知道是否可以只编译QtHttpServer(Qt6的扩展)所需的模块。
我试图在文档中找到此信息,但什么也找不到。

旧的Qt5方法是将
-skip
传递到configure命令行。e、 g.
配置-跳过qtremoteobjects-跳过qtwebengine
根据,此选项仍然存在。(在该页底部附近的“排除Qt模块”上滚动)。在您的情况下,运行configure时可能会传递大量
-skip
语句。每个可用的跳过选项都是源目录树中的顶级目录

我还没有像Qt5一样研究Qt6的构建。但在Qt5上,另一种不构建您不需要的东西的简单方法是从源代码树中删除任何顶级目录。例如,如果您不想构建
qtmoteobjects
qtwebengine
,只需删除这些顶级目录即可。(每次删除一个新的目录时,我们都会从源代码树中删除qtwebengine——它基本上都是Chromium,并且比代码库的其他部分加起来还要大!)不知道删除目录是否在Qt6和新的Ninja/CMake环境中起作用

我需要在Ubuntu18上安装Qt6。因为qt6不在存储库中(或者是吗?),所以我必须从源代码编译它们

这并不是完全跟踪-Qt通过他们的在线安装程序提供,您应该能够通过这种方式下载并安装Qt6。我在Fedora 33盒的
$HOME/Qt/
中安装了一份Qt 6.1.0的副本,与
/usr/lib64/qt5/
中的Qt 5.15.2系统安装完全分离。我没有编译任何一个

然而,也许您需要针对Qt源代码编译其他代码——获得一个工作的构建环境仍然是值得的

配置构建 在源代码树中运行
/configure--help
列出了可用于配置的选项,包括给出
的定义:

…在
--install
步骤失败,因为它缺少安装过程使用的帮助工具

第二轮 因此,我进行了另一次构建运行:

cmake——构建--目标QT工具
这实际上需要更长的时间,因为要构建全套工具(一些图形化的工具),我现在需要将大部分
QtCore
QtGui
、和
qtwidget
构建为依赖项,以及大块
qtdesclarative
(其中
QML
QtQuick
live)和其他模块,我在第一次运行时跳过了所有这些,因为我只想要
QtNetwork

在这里排除一些带有
/configure
选项的树会有所帮助,因为我可以避免构建许多我不需要的工具。可能还有更细粒度的目标,可以让我只构建安装脚本所需的特定工具(具有更少的依赖项),但是meh。不管怎样,没有核心库,Qt是非常无用的。尽管如此,如果您像您所说的那样受到限制,那么像selbie在另一个答案中详细介绍的那样,花更多的时间使用初始的
configure
来缩减构建集仍然是值得的

旁白:使用CMake安装 值得注意的是,
cmake--install
不会触发额外的构建(因此我的第一次尝试失败);它只安装已经构建的东西。因此,在这个过程中的任何时候都可以安全地运行一个实验性的
cmake--install.
。最坏的情况是,组件丢失

(与
make
等工具形成鲜明对比,在这些工具中,您通常可以运行
make-install
一步完成树的构建和安装,如果您在完全未构建的树上运行
cmake--install
,它将不会触发任何构建。在正常的cmake树中,它只会开始发出关于每个默认树的失败消息。)输出丢失,然后在未执行任何操作的情况下“成功”退出。但是,Qt有一些自定义安装脚本,它们希望访问生成树中的某些文件,因此在未构建/部分构建的Qt生成树中执行相同操作会导致安装脚本在找不到这些文件时出错。)

第三轮 所以,我开了个玩笑:即使构建了所有
qttools
cmake--install.
仍然失败,错误信息完全相同:

CMake Error at qtbase/src/tools/tracegen/cmake_install.cmake:53 (file):
  file INSTALL cannot find "$HOME/Qt/6.1.0/Src/qtbase/libexec/tracegen":
  No such file or directory.
Call Stack (most recent call first):
  qtbase/src/cmake_install.cmake:67 (include)
  qtbase/cmake_install.cmake:231 (include)
  cmake_install.cmake:47 (include)
似乎
tracegen
甚至不是
qttools
的一部分,但它本身就是一个目标。因此,我应该在第二轮中做的是:

cmake——构建。--目标跟踪
完成此操作后,可安装(仅)
QtNetwork

cmake --install ./qtbase/src/network
我还可以做以下事情:

cmake --build . --target qtbase
cmake --build . --target qmake  # The qtbase install crashes without it
cmake --install ./qtbase
QtBase是迄今为止最关键的,如果没有它,你就无法按照任何合理的定义进行Qt安装

完成此操作后,这是一个很好的测试,可以测试基本功能是否正常工作:

cmake——构建。--目标qtdiag
cmake—安装。/qttools/src/qtdiag
$HOME/Qt/my_6.1.0/bin/qtdiag
…如果一切正常(事实确实如此),那么到目前为止我安装的组件状态的大量信息应该转储到stdout。

有一个
-make
选项,声称只构建您指定的组件。但是我找不到关于“part”是什么的任何信息,我无法让它工作。
cmake --build . --target qtbase
cmake --build . --target qmake  # The qtbase install crashes without it
cmake --install ./qtbase