• 4179阅读
  • 14回复

Qt6 cmake编译问题 [复制链接]

上一主题 下一主题
离线hnwdx
 

只看楼主 倒序阅读 楼主  发表于: 2021-01-20
我是按照:
https://blog.csdn.net/sdhongjun/article/details/112058149
进行编译的,出现如下图错误如何解决?即moc.exe都没自动生成,所以报错误。


在线lixinwei

只看该作者 1楼 发表于: 2021-01-20
你遇到的问题似乎跟https://bugreports.qt.io/browse/QTBUG-88015是一样的
解决方法是要把自己下载的CMake的bin目录添加到环境变量中,避免使用VS2019自带的CMake
你参考的这个教程也提到了要添加到环境变量,可能你没仔细看
在线lixinwei

只看该作者 2楼 发表于: 2021-01-20
另外,他这个教程有些地方写的不太好:
不建议直接在源码目录下编译,这会污染源码,即使运行ninja clean,也无法清理干净
建议在源码之外新建一个目录,然后用cd命令切换到这个新建的目录
接下来依次运行:
<源码目录>/configure -prefix <安装目录> -debug-and-release
(他这个教程还用了-opensource选项,-opensource  -confirm-license选项在CMake构建系统中完全没有用,加和不加没有任何区别)
ninja -j <CPU的线程数>
(ninja默认只用6个线程编译;如果你的CPU少于6个线程,同时开6个线程也不会提高效率;如果CPU多于6个线程,更应该提高CPU的利用效率)
ninja install
3条评分好评度+1金钱+15
wjepdb 金钱 +10 - 2021-02-20
hnwdx 好评度 +1 问题分析透彻,追问一下:官方源码编译出来的llvm没有libclang_static.lib,导致QDoc不能正常编译,怎么办 2021-01-22
hnwdx 金钱 +5 问题分析透彻,追问一下:官方源码编译出来的llvm没有libclang_static.lib,导致QDoc不能正常编译,怎么办 2021-01-22
离线hnwdx

只看该作者 3楼 发表于: 2021-01-22
果真是高手啊。我以为vs2019带的cmake版本够新了,结果新中更有新中要求。

离线hnwdx

只看该作者 4楼 发表于: 2021-01-22
问题分析透彻,追问一下:官方源码编译出来的llvm没有libclang_static.lib,导致QDoc不能正常编译,怎么办
在线lixinwei

只看该作者 5楼 发表于: 2021-01-22
回 hnwdx 的帖子
hnwdx:
问题分析透彻,追问一下:官方源码编译出来的llvm没有libclang_static.lib,导致QDoc不能正常编译,怎么办

请下载Qt官方提供的libclang,这是专门用来编译qdoc的clang,作了一些特殊的处理。Qt官方也是用这个clang来编译的qdoc的。
下载链接:https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/prebuilt/libclang/qt/
对于Qt5,请务必选择6.0版本的;对于Qt6,建议选择11.0版本或12.0版本
编译前需要设置几个环境变量:
  1. set LLVM_INSTALL_DIR=<clang安装目录,该目录下应当有include、lib、bin等文件夹>
  2. set QDOC_USE_STATIC_LIBCLANG=1


上面那个链接的上级目录(https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/prebuilt/libclang/)下也有很多clang,那些是动态编译的clang,只有编译 Qt Creator 和 Qt for Python 时才要用到,不要下载错了
在线lixinwei

只看该作者 6楼 发表于: 2021-01-22
回 hnwdx 的帖子
hnwdx:果真是高手啊。我以为vs2019带的cmake版本够新了,结果新中更有新中要求。[表情]
(2021-01-22 08:38)

vs2019 16.8版本自带的cmake是3.18.2
如果要-debug-and-release,则需要的最低版本是3.18.3
如果只编译release,3.18.2也可以用

Qt开发团队中负责CMake构建系统的开发人员或多或少也在参与CMake本身的开发,因此CMake版本升级会考虑到Qt的需要,编译Qt 6也尽量需要新版本的CMake
离线fsu0413

只看该作者 7楼 发表于: 2021-01-22
说实话为了这个我都在我的CentOS8中自行编译了一个CMake 3.19
Qt6的第一版CMake兼容是3.15,后来的版本需求越来越高,导致最终Qt6和CMake 3.18.4基本绑定了。。。。
顺带一提 VS2017自带的CMake是3.12
在线lixinwei

只看该作者 8楼 发表于: 2021-01-23
回 fsu0413 的帖子
fsu0413:说实话为了这个我都在我的CentOS8中自行编译了一个CMake 3.19
Qt6的第一版CMake兼容是3.15,后来的版本需求越来越高,导致最终Qt6和CMake 3.18.4基本绑定了。。。。
顺带一提 VS2017自带的CMake是3.12 (2021-01-22 23:46)

目前dev分支和6.0分支已经把最低要求的CMake版本改成了3.16
如果要-debug-and-release,当CMake版本低于3.18.3时,会显示warning

即将发布的Qt 6.0.1应该会包含这一更改

离线hnwdx

只看该作者 9楼 发表于: 2021-01-23
完美搞定,谢谢大侠指点!
离线fsu0413

只看该作者 10楼 发表于: 2021-01-24
回 lixinwei 的帖子
lixinwei:目前dev分支和6.0分支已经把最低要求的CMake版本改成了3.16
如果要-debug-and-release,当CMake版本低于3.18.3时,会显示warning
即将发布的Qt 6.0.1应该会包含这一更改
....... (2021-01-23 00:24) 

啊这。。。。。。
离线hnwdx

只看该作者 11楼 发表于: 2021-01-25
回 lixinwei 的帖子
lixinwei:请下载Qt官方提供的libclang,这是专门用来编译qdoc的clang,作了一些特殊的处理。Qt官方也是用这个clang来编译的qdoc的。
下载链接:https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/prebuilt/libclang/qt/
对于Qt5,请务必选择6.0版本的;对于Qt6,建议选择10.0 .. (2021-01-22 16:56) 

再追问一下,编译出来的assistant.exe不带.qch文件内容,源码目录下也不多,需要自己添加吗?
在线lixinwei

只看该作者 12楼 发表于: 2021-01-25
回 hnwdx 的帖子
hnwdx:
再追问一下,编译出来的assistant.exe不带.qch文件内容,源码目录下也不多,需要自己添加吗?

qch文件就是Qt文档,需要另外编译。
  1. <源码目录>/configure -prefix <安装目录> -release
  2. cmake --build . --target qtbase/src/plugins/platforms/all qtbase/src/plugins/sqldrivers/all --parallel <CPU线程数>
  3. cmake --build . --target docs --parallel <CPU线程数>
  4. cmake --build . --target install_docs

下次可以在按照2楼的步骤编译Qt源码之后,不关闭控制台,再依次运行上面的第3行和第4行,这样源码和文档能一并编译
离线hnwdx

只看该作者 13楼 发表于: 2021-01-26
谢谢,全部搞定。
在线gardenhill

只看该作者 14楼 发表于: 2021-10-23
谢谢分享, 受教了
快速回复
限100 字节
 
上一个 下一个