【问题标题】:How to specify target mac os x version using qmake如何使用 qmake 指定目标 mac os x 版本
【发布时间】:2023-03-22 09:40:01
【问题描述】:

我正在尝试使用 Qt Creator/qmake 在 Mac OS X 上编译 c++11 代码,但出现以下错误:

clang: error: invalid deployment target for -stdlib=libc++ (requires OS X 10.7 or later)

当我检查编译命令行时,我注意到它包含 -mmacosx-version-min=10.6 标志。我尝试如下更新我的 .pro 文件,但似乎没有考虑到这一点:

QMAKE_CXXFLAGS += -std=c++11 -stdlib=libc++

macx {
    -mmacosx-version-min=10.7
}

任何建议都会有所帮助。谢谢!

【问题讨论】:

  • 您的 Qt 版本可能太旧了。操作系统和 Qt 版本是什么,您是否尝试过使用 Qt 5.2.1 或 5.3.x?
  • 请参阅下面的答案。它不依赖于 Qt 版本,而是依赖于 qmake.conf 指定的最小部署目标版本。

标签: c++ macos qt qmake


【解决方案1】:

您实际上可以添加该部署目标行QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 到您的 QMake 项目文件。您不必重新安装 Qt。

但要记住一件事:如果您构建包含在应用程序包中的任何其他库,请确保它们也经过编译以实现向后兼容性!如果它对任何库有帮助,还有一个等效的 CMake 命令,CMAKE_OSX_DEPLOYMENT TARGET

【讨论】:

    【解决方案2】:

    OK 在查看了类似问题后找到了解决方案:QtCreator build system is broken after OSX upgrade

    您可以通过在 Qt 安装中更新 qmake.conf 文件来更改最小的 Mac OS X 目标(我使用的是 Qt5.3)。该文件位于 Qt 安装目录 Qt/5.3/clang_64/mkspecs/macx-clang/qmake.conf 更新版本如下:

    #
    # qmake configuration for Clang on OS X
    #
    
    MAKEFILE_GENERATOR      = UNIX
    CONFIG                 += app_bundle incremental global_init_link_order lib_version_first     plugin_no_soname
    QMAKE_INCREMENTAL_STYLE = sublib
    
    include(../common/macx.conf)
    include(../common/gcc-base-mac.conf)
    include(../common/clang.conf)
    include(../common/clang-mac.conf)
    
    #QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
    QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
    
    load(qt_config)
    

    请注意,我已注释掉随 Qt 安装提供的默认 QMAKE_MACOSX_DEPLOYMENT_TARGET 版本。

    最后,您还可以指定在您的 .pro 文件中使用哪个 sdk,如下所示:

    macx {
        QMAKE_MAC_SDK = macosx10.9
    }
    

    【讨论】:

    • 修复方法是重新安装 Qt。安装过程会根据平台调整这些文件。主要的操作系统版本升级会破坏开发环境并非不可想象。
    • 我认为这与重新安装 Qt 无关。我正在使用最新的 Qt 5.3 版本。我想我在某处读到,从源代码构建 Qt 时,您可以为 Mac 指定最小部署目标。这仅仅意味着当 Qt 的人构建二进制文件时,他们将 Mac OS X 10.6 指定为最小部署平台。
    • 因为它显然对我和其他许多人都有效,所以我坚持认为是安装过程进行了调整。已安装的 Qt 版本不一定可移植到新的主要 OS X 版本。
    • 不要在include(../common/macx.conf)之类的东西中使用相对路径,这些路径将是相对于项目位置的。而是使用绝对路径,例如 include(/Users/(username)/Qt/5.7/clang_64/mkspecs/common/macx.conf)
    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多