【问题标题】:Edit Build Settings Template for 'iOS Default' (and 'Mac OS X')编辑“iOS 默认”(和“Mac OS X”)的构建设置模板
【发布时间】:2012-12-16 02:12:19
【问题描述】:

在 Xcode 中,所有目标的构建设置都继承自项目的构建设置。项目的构建设置继承自“iOS Default”。此继承如下所示,其中选择了 Levels 而不是 Combined

对于那些不知道的人,项目设置下的粗体条目表示覆盖。可以通过突出显示设置然后按 COMMAND-BACKSPACE 来“清除”覆盖。

它变得真的老了,不断地为我创建的每个重要项目更改这些值。特别是像 Other C Flags 这样的项目,我必须在其中添加-Wall -Wextra -Wconversion -wstrict-overflow预处理器宏是另一个必须始终修复以包含 Posix 的NDEBUG=1。我绝对认为 Release 中缺少 NDEBUG=1 会构建一个错误,因为 Posix 需要 NDEBUG 删除由 assert() 引起的 abort();并且 Apple 的 UI 标准不允许使用 abort()。 (DEBUG=1 与 Debug 版本类似,因为尽管 Posix 仅标准化了 NDEBUG,但有很多使用它。

从下面的@Petesh,我知道我可以为每个项目使用一个配置(也许创建一次,然后重新使用它)。但这意味着我正在应用“正确”或“正确”设置来掩盖“IOS 默认”模板中的缺陷设置。我的目的是一劳永逸地解决问题的根源。

如何编辑默认设置模板?文件系统上是否有代表“iOS Default”的物理文件?如果可以,是否可以编辑(是否为 XML)?

更新:基于@Peresh 的回答(没有永久修复问题的磁盘文件):RADAR 12941954。它可能会在 Apple 的错误报告系统中未经确认、未答复和未修复多年,就像我和其他人花时间报告的其他错误一样。

【问题讨论】:

  • 您可以使用“构建配置”文件来导入所有这些设置 - 请参阅 Xcode 帮助中的“基于配置文件的构建配置”。

标签: iphone ios xcode ipad settings


【解决方案1】:

构建配置文件是选择一组用于预处理/编译的选项的理想方式 - 您可以使用 .xcconfig 文件和您希望作为基础的设置,然后为目标选择此基础配置。

该文件需要在项目的基础上创建,名称为TargetType.xcconfig。对于您的基本编译器标志要求,您可以使用包含以下内容的文件:

OTHER_CFLAGS = -Wall -Wextra -Wconversion -wstrict-overflow

一旦您将目标基于.xcconfig 文件,它将获取这些选项作为所有指定目标的默认项。

您可以为每个 Debug 和 release 添加一个,允许指定 NDEBUG=1DEBUG=1 选项,例如

GCC_PREPROCESSOR_DEFINITIONS = NDEBUG=1

会将此设置应用于配置。

查看Basing a Build Configuration on a Configuration File 的 Xcode 帮助。还有a tutorial在线经历了这个过程。

我使用gcc/g++ 规范文件来操作gcc 的默认编译器选项。如果您使用 LLVM 的 gcc 驱动程序,这仍然有效。默认编译器选项来自未修改的规范文件 - 即它内置在编译器中,并且不驻留在磁盘上。流程是:

gcc -dumpspecs > specs
specdir=$(gcc -print-search-dirs | sed -n 's/install: //p')
sed 's/^\(.*mdynamic-no-pic:-fPIC\)/<default options here> \1/' specs > newspecs
sudo cp newspecs $specdir/specs

您可以通过执行以下操作来验证是否正在使用规范文件:

gcc -v <file>

它应该显示如下内容:

Reading specs from /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/specs

而不是

Using built-in specs.

这可能会引发混乱,因为这些标志会影响所有 gcc/g++ 编译 - 即使对于 macports 包也是如此,这意味着它们可能无法正确编译。

clang/clang++,不幸的是没有规范文件的概念,因此在编译时会忽略这个文件 - 它使用的所有选项都是在 clang 构建时定义的。在这种情况下,无法操作默认编译器选项,因为它不会尝试读取磁盘上的文件来确定默认编译器选项。

【讨论】:

  • 谢谢。所以,不要采取错误的方式,但我不想用每个项目的正确设置来覆盖有缺陷的配置设置。我想修复有缺陷的设置的来源,那将是“iOS”默认值。
  • 您可以使用 gcc/g++ 的规范文件进行 futz - 这允许更改编译器的默认编译标志。不过,我认为 clang 没有等价物。
  • 通过这条评论,我的意思是默认编译设置是编译器固有的,而不是 xcode。
  • 谢谢。我猜我在问什么(我为混乱道歉):文件系统上是否有代表“iOS Default”的物理文件?如果可以,是否可以编辑(是否为 XML)?
  • 不,磁盘上没有代表“iOS 默认”的文件 - 它实际上是内置在编译器驱动程序 (clang) 中的。您可以编辑默认项目模板以添加这些标志,但这与使用构建配置文件几乎相同。
猜你喜欢
  • 2012-03-11
  • 2012-03-04
  • 2010-10-20
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多