如何在Xcode项目中设置包含路径

67

我正在尝试在Objective-C的Xcode项目中使用一个C库。

该库的目录结构如下:

-- include/
    |-- config.h
    |-- lib/
    |    |-- file1.h
    |    |-- file2.h
    |    |-- file3.h

图书馆的文档建议包含file1.h,而file1.h包含file2.h和file3.h。

我在包含file2.h和file3.h时遇到了“文件未找到”的错误。它们是由file1.h以以下方式包含的:

#include <lib/file1.h>
#include <lib/file2.h>

我在这里阅读到,这些尖括号指示预处理器沿着INCLUDE环境变量指定的路径搜索包含文件,而不是在包含#include的文件所在目录中搜索。

因此,我通过转到产品->编辑方案..并将其设置为/the-whole-path-to/include/来在Xcode中添加了INCLUDE环境变量,但我仍然收到文件未找到错误。

如果我像这样更改file1.h以包含它们,则可以成功包含文件:

#include "file2.h"

但我不想对库中的每个文件都这样做。

我该如何解决这个问题?


还可以在苹果开发者网站上查看Xcode Build Setting Reference - jww
7个回答

65
在XCode 5.0.2版本中,实现这个的最佳方法可能是将它添加到目标的“搜索路径”面板中。 定位它(对我来说)非常不直观。 对于那些感到困惑的人,这是我的做法:
单击左列上的Project Navigator图标(看起来像一个文件夹)。 然后,单击项目条目。 这应该显示主窗格中的一堆设置。 在此窗格的顶部,单击“Build Settings”。 这会显示一堆条目...其中包括一个称为Search Paths的条目...但您无法在此处添加搜索路径! 这让我咬牙切齿了很长时间,直到我发现此窗格顶部的项目名称是一个下拉菜单。从中选择目标,现在您应该能够双击“Header Search Paths”并执行所需的编辑。
哦,疯狂GUI的乐趣。

4
我添加项目的搜索路径没有任何问题,无需切换到目标:http://i.imgur.com/Tcs36ec.png。 - Rag
1
@BrianGordon,你的图片明确显示了将目标更改为项目。 - Anton K
1
@AntonK 对的,它在项目上。不是目标。JohnClements说必须在目标上才能出现该选项的蓝色图标。 - Rag
这让我咬牙切齿了相当一段时间,直到我发现此窗格顶部的项目名称是一个下拉菜单;这帮了我很多。谢谢。 - mxi1
1
非常不直观”...这不就是Xcode的座右铭吗? - undefined

53

搞定了。

你只需在“其他C标志”下的构建设置中添加-I标志即可。

所以在您的目标的构建设置中搜索“其他C标志”,并添加-I/路径到包含文件夹/

以下是屏幕截图:enter image description here


在你的情况下,pathToInclude是什么?我之所以问这个问题,是因为我的路径位于xcode项目上方,我尝试使用-I/../../folder_to_include,但它没有起作用。谢谢 - xarly
1
最好将其添加到搜索路径中,让XCode知道你在做什么,而不是粘贴一个-I标志。 - John Clements
@John Clements,谢谢,最终我使用了您的解决方案,并且它可以工作!而且您是对的,这更加简洁。谢谢。 - xarly
我无法使用类似-I$(JAVA_HOME)/include的路径,我该如何实现? - dg_no_9
为什么这个解决方案比设置Header Search Path更好? - trojanfoe
将“-I”添加到“Other C Flags”与使用“HEADER_SEARCH_PATHS(头文件搜索路径)”具有相同的效果。请参阅苹果开发者网站上的[Xcode Build Settings Reference](https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html)。 - jww

17
尝试以下操作:

1- 在左侧 Xcode 窗格中选择您的项目文件
2- 确保在中间的 Xcode 窗格中选择了您的项目
3- 在中间的 Xcode 窗格顶部选择“Build Settings”
4- 确保“Build Settings”下方刚好选择了“所有”和“组合”
5- 在“Build Settings”下方的搜索框中键入“header”

此时,您应该在中间窗格中看到搜索路径字段已准备好进行编辑。


12

我在 Xcode 5.0.1 中使用项目“构建设置”解决了此问题(正如 John 和 Ian 上面提到的,但由于声望不足无法评论)。

新信息:

当向“用户”头文件搜索路径中添加包含文件时,还需要将“总是搜索用户路径”更改为“是”。

当向(非用户)头文件搜索路径中添加包含文件时,不需要“总是搜索用户路径”。


4
虽然这样做可以起到作用,但最好将其放在“搜索路径”选项卡下。

2
能否提供指引? - Slipp D. Thompson
不要将它放在“Apple LLVM编译器4.1 - 语言”下面,而是放在“搜索路径”下面。有一个特别用于包含的路径。 - geometrian
答案应该独立存在。你的回答似乎是在参考现有的答案,但由于它们显示的顺序一直在变化,这是一个可怕的想法。坦白地说,在现有答案下面发表评论可能更合适。 - Pascal Cuoq

3
您可以使用“其他C标志”或使用“HEADER_SEARCH_PATHS”来指定可执行文件查找头文件时要查找的包含路径。

0
在2021年的Xcode v.12.4中,解决方案似乎是:
项目->目标->常规->"扫描所有源文件以包含"->设置为"Yes"
这对我有用。
但是,如果您有特定.h文件的多个版本,则可能会出现问题,这可能不是一个好的做法,但如果您有许多子目录和类似命名的包含文件,则有可能。

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