最近加入了LLVM平行宇宙计划小组,在小组内提交了一定数量的PR。这个计划究竟是做什么的呢?LLVM平行宇宙计划是基于LLVM技术栈构建openEuler软件包,大白话讲就是原本一个软件包是用gcc/g++编译的,现在换成clang/clang++编译。虽然只是切换了编译工具,但是偶尔也有可能出现一些意想不到的错误。
我选择修的软件包是qt-mobility,地址在这:Show Mega:24.03:SP1:Everything / qt-mobility - 开源软件构建与测试
失败日志如下
可以看到error部分,gcc/g++并不支持--config选项,按理来说,OBS工程配置已经将编译工具链切换为LLVM,但是编译的时候仍然出现gcc/g++,这是因为在Makefile等编译脚本里面显式指定了gcc/g++作为编译器,因此需要手动改回来。不过,这个项目里面并没有Makefile,它使用qmake根据.pro结尾的文件来生成Makefile。
这段日志呈现了qmake大量读取.pro文件的过程,既然Makefile通过qmake生成,那么可以在qmake读取.pro文件的时候传入跟编译器有关的命令行参数,问题自然就解决了。qmake QMAKE_CC=clang QMAKE_CXX=clang++ xxx.pro,形如这样。
我改动的部分已标注好了,主要就是根据编译工具链环境来添加一个宏,一开始我只添加了QMAKE_CXX=clang++,依然编译错误(因为编译过程也用到了gcc,但是gcc不支持--config选项),后面索性加上了QMAKE_CC=clang,于是编译成功了。工程地址在这:Show home:Thomas134:branches:Mega:24.03:SP1:Everything / qt-mobility - 开源软件构建与测试
今天是年初二,有人开开心心过年,有人依旧在工作中奋战,希望每个人都能在2025年实现自己的梦想。