Qt Creator for Mac:升级Xcode导致工程编译出错

工作使用的开发环境是Mac + Qt Creator 5.9.7,前段时间脑子发热想要升级Xcode,于是从Xcode 10.2升级到Xcode 13.1,升级之后发现打开原来的Qt Creator项目编译出错了,主要有两个错误:

  1. 项目中使用了libstdc++.6.0.9,但是Apple早就想把这个库换到libc++了,所以新的MacOS SDK中没有这个库了。
  2. 编译出错,提示找不到sdk,我原来的系统是macOS X 10.14.6,升级到macOS X 10.15.1之后,SDK变了,原来的SDK被删掉了,找不到也是自然的事情,但是Qt Creator就是“意识”不到这个变化。

第一个问题,解决办法也简单,从网上找到这个文件,拷贝到指定的地址即可。不过要注意一点,需要换到xcode-select指定的目录。这个macOS换过位置。

第二个问题找了好久,表现是由qmake生成的cmake文件中:

CFLAGS        = -pipe -O2 -g $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.11 -Wall -W -Wall -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-unused-local-typedefs -fPIC $(DEFINES)
CXXFLAGS      = -pipe -stdlib=libc++ -O2 -g -std=gnu++11 $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.11 -Wall -W -Wall -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-unused-local-typedefs -fPIC $(DEFINES)

注意看,上面的-isysroot项,我尝试对Xcode,Command Line Tools,以及Qt Creator进行删除和重新安装,都无法将这个参数值从MacOSX10.14.sdk升级到MacOSX10.15.sdk。网上查到的一些资料说,在pro文件中设置QMAKE_MAC_SDK指定为MacOSX10.15.sdk,结果试了不行。后来在Qt Forum查到一个资料(Setup root macox SDK for qt)才算是找到了正解。解释是这样的第一次安装好并打开一个qt工程,Qt Creator会在当前用户目录下生成一个.qmake.stash文件,注意是隐藏文件,这个文件中设置了Qt 工程中要使用的各种参数,可以看一眼文件的内容(不必细看):

QMAKE_MAC_SDK.macosx.--show-sdk-path = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
QMAKE_MAC_SDK.macosx.--show-sdk-platform-path = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform
QMAKE_MAC_SDK.macosx.--show-sdk-version = 10.14
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CXX = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_FIX_RPATH = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool \
    -id
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_AR = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar \
    cq
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_RANLIB = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib \
    -s
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK_SHLIB = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_ACTOOL = /Applications/Xcode.app/Contents/Developer/usr/bin/actool
QMAKE_CXX.INCDIRS = \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/include \
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include
QMAKE_CXX.LIBDIRS = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib
QMAKE_CXX.QT_COMPILER_STDCXX = 199711L
QMAKE_CXX.QMAKE_APPLE_CC = 6000
QMAKE_CXX.QMAKE_APPLE_CLANG_MAJOR_VERSION = 10
QMAKE_CXX.QMAKE_APPLE_CLANG_MINOR_VERSION = 0
QMAKE_CXX.QMAKE_APPLE_CLANG_PATCH_VERSION = 1
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 4
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 1
QMAKE_CXX.COMPILER_MACROS = \
    QT_COMPILER_STDCXX \
    QMAKE_APPLE_CC \
    QMAKE_APPLE_CLANG_MAJOR_VERSION \
    QMAKE_APPLE_CLANG_MINOR_VERSION \
    QMAKE_APPLE_CLANG_PATCH_VERSION \
    QMAKE_GCC_MAJOR_VERSION \
    QMAKE_GCC_MINOR_VERSION \
    QMAKE_GCC_PATCH_VERSION
QMAKE_XCODE_DEVELOPER_PATH = /Applications/Xcode.app/Contents/Developer
QMAKE_XCODE_VERSION = 10.2.1

文件中把Qt Creator使用的macOS X的SDK版本写死了,如果SDK更新了,只能把这个文件删掉,再打开Qt工程重新qmake一下,生成新的.qmake.stash文件。

随便在网上搜一下这个问题发现有好多人碰到过,比如关键字为:

fatal error: ‘string.h’ file not found #include_next <string.h>

Qt Creator for Mac的Debugger启动失败。查找资料(Troubleshooting Debugger)发现可以启动调试之后,打开Window --> Views --> Debugger Log,就可以看到启动调试器的过程中有什么问题。我的电脑上发现原因是lldb启动过程中,python脚本(/Users/hj/Qt5.9.7/Qt Creator.app/Contents/Resources/debugger/lldbbridge.py)中的print语法使用的是python 2的那种不带括号的用法,需要打开这个脚本,把所有print的地方换成加括号的就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值