向Xcode添加系统头文件搜索路径

61

(发布这个问题是为了参考,我会立即回答)

如何在Xcode中添加头文件搜索路径? 特别是使用以下语法进行包含时:

include <myheader.h>
  1. 如何像系统头文件一样全局添加路径到所有项目中。
  2. 只向特定项目添加路径。
4个回答

105

我们有两个选项。

  1. 查看Xcode偏好设置中的首选项->位置->“自定义路径”。在此添加的路径将成为一个变量,您可以将其添加到项目构建设置中的 “Header Search Paths” 中作为 “$cppheaders”,如果您用该名称保存了自定义路径。

  2. 在项目信息的构建设置中设置 HEADER_SEARCH_PATHS 参数。我在这里添加了 "${SRCROOT}" 而没有递归。对于大多数项目,此设置效果很好。

关于第二个选项:

Xcode使用具有GCC兼容命令集合的Clang。

GCC有一个选项-Idir,它添加系统头文件搜索路径。此选项可通过Xcode项目构建设置中的HEADER_SEARCH_PATHS访问。

但是,添加到此设置中的路径字符串不应包含任何空格字符,因为该选项将原样传递给shell命令。

但是,一些OS X用户(如我)可能会将其项目放在包含空格的路径上,这些路径应该被转义。如果您手动输入,可以像这样进行转义:/Users/my/work/a\ project\ with\ space。您还可以使用引号转义它们以使用环境变量,例如 "${SRCROOT}"

或者只需使用.来表示当前目录。我在Webkit的源代码中看到过这个技巧,但我不确定构建时是否将当前目录设置为项目目录。

${SRCROOT} 是 Xcode 预定义的值。它表示源代码目录。你可以在 参考文档 中找到更多的值。

顺便提一下,其实你不必使用大括号 {}。使用 $SRCROOT 也可以得到同样的结果。如果你知道它们之间的区别,请告诉我。


3
还要注意,${SRCROOT} 是包含 .xcodeproj 目录的目录,不是 Xcode 存放源文件的目录(至少在我的 Xcode 4.6.3 上是这样)。为了找到我的源代码,我需要再深入一级。 - Randall Cook
6
有或没有花括号的区别在于,使用花括号可以包含空格的路径。 - Prof. Falken
2
爱你的反斜杠技巧 - Tom Roggero
是“先执行步骤1再执行步骤2”,还是“执行选项1或选项2”? - jameshfisher
@user124384 可能第一个选项有问题。但第二个选项似乎仍然有效。 - eonil
显示剩余2条评论

14

针对 Eonil 的项目级设置答案进行补充。在选择目标并选择“构建设置”选项卡后,搜索路径下的“头文件搜索路径”可能没有任何列表。此时,您可以在搜索栏中从“基本”切换到“全部”,然后“头文件搜索路径”将出现在搜索路径部分中。


3

为了完整性而使用引号。

"/Users/my/work/a project with space"/**

如果不需要递归,则删除/**


4
请务必像上面显示的那样使用花括号来表示变量,而不是圆括号。后者似乎会在具有空格的项目中引起解析问题。 - Max MacLeod

3
尽管这个问题有一个答案,但当我遇到同样的问题时,我用了不同的解决方法。当我使用选项 创建文件夹引用 复制文件夹时,出现了这个问题;然后添加文件夹到 build_path 的解决方案起作用了。 但是,当使用选项 为任何添加的文件夹创建组 添加文件夹时,头文件会自动被捡起来。

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