3

我在 OSX 上使用 qmake 和 clang。我尝试在 .pro 文件中使用带有以下标志的 c++11

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

但是 qmake 在 makefile 中生成跟随标志

CXXFLAGS = ... -mmacosx-version-min=10.5 ...

此标志导致 clang 引发错误

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

将标志更改为 10.7 解决了问题

CXXFLAGS = ... -mmacosx-version-min=10.7 ...

有什么方法可以阻止 qmake 在 makefile 中发出这个标志?

4

2 回答 2

0

通过 指定目标版本QMAKE_MACOSX_DEPLOYMENT_TARGET,例如:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7

如果您完全摆脱标志,您会收到一些消息,例如:

ld: warning: -macosx_version_min not specified, assuming 10.8

因此,无论如何,您的编译器都会自动添加它。

那面旗帜的存在是有原因的。它已写入您的二进制文件。当您尝试在旧系统上加载该二进制文件时,它将中止。

现在,如果你真的想要 MacOSX 10.5 兼容性,你不能使用-stdlib=libc++,因为libc++在 MacOSX 10.7 之前根本不可用。

如果你需要libc++(例如一些 C++11 特性)+ 你想让它在 <10.7 上工作,那并不容易。有关相关问题,请参见此处

于 2014-02-17T13:17:10.120 回答
0

您可以安装其他编译器,例如 gcc4.7。

macports 有几个简单的方法:
1. http://www.macports.org/install.php
2. Applications > Utilities > Terminal
3. 在终端: sudo port selfupdate
4. sudo port install gcc47
5. 现在添加新的编译器Qt(项目选项卡) 6. 在配置文件更改 QMAKE_CXXFLAGS += -std=c++0x

其他方式 brew:
1. 应用程序 > 实用程序 > 终端
2. 在终端: ruby​​ -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)" 3. 在终端: brew doctor
4. 在终端: brew install gcc
5. 现在在 Qt(项目选项卡)中添加新编译器 6. 在配置文件更改 QMAKE_CXXFLAGS += -std=c++0x

于 2013-07-08T02:42:38.847 回答