(发布这个问题是为了参考,我会立即回答)
如何在Xcode中添加头文件搜索路径? 特别是使用以下语法进行包含时:
include <myheader.h>
- 如何像系统头文件一样全局添加路径到所有项目中。
- 只向特定项目添加路径。
我们有两个选项。
查看Xcode偏好设置中的首选项->位置->“自定义路径”。在此添加的路径将成为一个变量,您可以将其添加到项目构建设置中的 “Header Search Paths” 中作为 “$cppheaders”,如果您用该名称保存了自定义路径。
在项目信息的构建设置中设置 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
也可以得到同样的结果。如果你知道它们之间的区别,请告诉我。
针对 Eonil 的项目级设置答案进行补充。在选择目标并选择“构建设置”选项卡后,搜索路径下的“头文件搜索路径”可能没有任何列表。此时,您可以在搜索栏中从“基本”切换到“全部”,然后“头文件搜索路径”将出现在搜索路径部分中。
为了完整性而使用引号。
"/Users/my/work/a project with space"/**
如果不需要递归,则删除/**
。
创建文件夹引用
复制文件夹时,出现了这个问题;然后添加文件夹到 build_path 的解决方案起作用了。
但是,当使用选项 为任何添加的文件夹创建组
添加文件夹时,头文件会自动被捡起来。