如何停止qmake发出特定的标志?

3

我正在使用带有clang的OSX上的qmake。我尝试在.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中发出这个标志?

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++,因为在 MacOSX 10.7 之前根本没有 libc++

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


0

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

有几种简单的方法,如下:
1. http://www.macports.org/install.php
2. 应用程序 > 实用工具 > 终端
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接